2016-07-09 2 views
0

Die offizielle Dokumentation gibt Scalacheck das folgende Beispiel:Warum wird ein Scalacheck-Prop-Wert nicht ausgewertet?

property("stringLength") = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
    } 

ich gelesen, dass dies auch so geschrieben werden kann:

val stringLength = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
    } 

Wie kann ich die zweite Form von Testcode ausführen? Wenn ich sbt test ausführe, passiert nichts mit der zweiten Version.

+0

Dies wurde ursprünglich unter http://stackoverflow.com/questions/35886206/no-implicit-view-available-from-anyval-org-scalacheck-prop-error gefragt -property/38283963, aber ich habe die zweite Frage hier weggelassen, da sie nicht direkt mit dem ersten Problem zusammenhängt. – Pavel

Antwort

0

Das Problem ist, dass die zweite Version einfach ein val deklariert, das einen Verweis auf die fragliche Eigenschaft enthält, aber das ist nicht genug, um Scalacheck zu bekommen, um es auszuwerten. Dieser Stil zum Deklarieren einer Eigenschaft ist beispielsweise nützlich, wenn Sie eine neue Eigenschaft aus anderen grundlegenden Eigenschaften zusammenstellen möchten. Sie können es direkt kontrollieren oder die besondere Eigenschaft Setter, um zuweisen, um es als Teil der Testlauf ausgewertet werden:

val stringLength = Prop.forAll { s: String => 
    val len = s.length 
    (s+s).length == len+len 
} 

// invoke directly: 
stringLength.check 

// alternatively, just declare it the usual way 
property("stringLength") = stringLength 

Dies ist an sich nicht sehr nützlich, so, wie es soll zu verwendet werden soll, ist vielleicht so etwas wie dieses:

property("composite") = Prop.all(stringLength, prop2, prop3, ...) 
Verwandte Themen