2016-04-29 11 views
0

Ich bin neu in Scala, Scalacheck und specs2 also ertragen Sie mit mir, wenn vielleicht Frage ist offensichtlich. Ich habe versucht, ein Beispiel dafür zu sehen, konnte aber nichts Ähnliches finden.Hohe Scalacheck-Eigenschaft

Grundsätzlich suche ich nach einer Möglichkeit, eine Testklasse mit specs2 zu erstellen, um eine Prop.forAll-Eigenschaft zu definieren, die als Parameter eine weitere scalacheck-Eigenschaft (donno, falls das möglich ist), einen Generator (Gen [A]) und einen Dateipfad und prüft, ob die Eigenschaft für eine bestimmte Gruppe von Samples (vom Generator kommend) besteht und speichert den Fehler in der Datei.

Gibt es trotzdem, dies zu implementieren? Im Gespräch in allgemeiner Weise

+0

Wie ist Ihre Immobilie Empfangs- und andere Eigenschaft + ein Generator + ein Dateipfad eines „Prop“? Insbesondere wenn du 'Prop.forAll ((p: Prop, g: Gen [A], f: Datei) => ...)' nimmst, musst du ein 'Arbitrary' für p, g und f haben. – Eric

+0

Die Gen [A] wird von einer Klasse FromRDDGen erhalten, die eine RDD liest und eine als Gen [A] umhüllte Zeile zurückgibt, der Pfad würde in der Testklasse angegeben. Das Hauptziel ist: gegeben eine Eigenschaft P zu überprüfen, ob es für die Gen [A] fehlschlägt und speichern Sie es in der Datei. – mtelloz

Antwort

0

Ich schlage vor, diese:

import org.specs2._ 
import org.specs2.execute._ 
import org.scalacheck._ 

class TestSpec extends Specification with ScalaCheck { def is = s2""" 

    Test my RDD $test 

    """ 

    def test = { 
    // get/create a generator 
    val gen: Gen[Row] = ??? 
    // run the property 
    property(gen, "prop1.txt") { r: Row => 
     r.values must haveSize(3) 
    } 
    } 

    def property[A, R : AsResult](g: Gen[A], path: String)(prop: A => R): Result = 
    saveResult(path)(Prop.forAll(g)(prop)) 

    def saveResult[R : AsResult](path: String)(r: R): Result = { 
    val result = AsResult(r) 
    if (!result.isSuccess) writeToFile(result, path) 
    result 
    } 

    def writeToFile(result: Result, path: String) = ??? 

    case class Row(values: List[Int]) 
} 
+0

Hallo dort! Wenn Sie versuchen, Ihr Beispiel in der Eigenschaftsfunktion beim Aufrufen von saveResult anzuwenden, könnten Sie dieses Codebeispiel erklären: 'saveResult (Pfad) (Prop.forAll (g) (prop))' Wie funktioniert die Übergabe von 2 Parametern in Klammern an die forAll-Props . Ich bekomme eine Einheit keine Parameter Fehler :(aber insgesamt Ihr Beispiel sieht wirklich vielversprechend Danke! – mtelloz

+0

Sorry, dass. Ich habe den Code bearbeitet, es kompiliert jetzt. – Eric

+0

Es funktioniert! Vielen Dank! Ich möchte Sie etwas fragen Ansonsten, wenn Sie mich lassen, wenn ich die Gen in meinem Fall definiere, wickle ich eine Zeile von einer RDD, die aus einer Avro-Datei erstellt wird, aber seit ich es mit Generika implementieren, wenn ich versuche, komplexe Eigenschaften in der Testfunktion zu definieren also, da es nur eine Zeile zurückgibt, sollte ich eine Fall-Klasse wie Sie erstellen und Parameter nach dem Schema in der AVRO definieren und es werfen? Übrigens danke, dass Sie sich die Zeit nehmen, meine Fragen zu beantworten! Mit freundlichen Grüßen. – mtelloz