2012-05-31 6 views
5

Ich versuche, eine einfache Eigenschaft Prüfung zu implementieren, aber meine Scalacheck Generatoren ignoriert. Was mache ich hier falsch?Scalacheck ignoriert die zur Verfügung gestellten Generatoren

object AlgorithmTest extends Properties("Algorithm") { 
    property("Test") = forAll (Gen.choose(0,10)) (n => n>=0 & n<10) 
} 

und dies ist das Ergebnis in SBT

[info] ! Algorithm.Test: Falsified after 12 passed tests. [info] > 
ARG_0: -1 [error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, 
Skipped 0 
+0

Das Problem wurde jetzt behoben (für eingebaute Generatoren) durch die Verwendung von 'soThat' Nachbedingungen - siehe https://github.com/rickynils/scalacheck/issues/8 – DNA

Antwort

4

es wie das Schrumpf Beispiel sieht das die forAll Methode übergeben wird, ist nicht um den Generator zu verwenden, wenn für kleinere Gegen Beispiele. Wenn Sie Ihre Immobilie ändern:

property("Test") = Prop.forAllNoShrink(Gen.choose(1, 10)) (n => n >= 0 && n < 10) 

Dann sollte es richtig mit fehlschlagen:

[info] ! Algorithm.Test: Falsified after 7 passed tests. 
[info] > ARG_0: 10 
[error] Failed: : Total 1, Failed 1, Errors 0, Passed 0, Skipped 0 

Eine Möglichkeit, die Shrink Werte zu visualisieren ist die Prop.collect Methode zu verwenden:

property("Test") = Prop.forAll(Gen.choose(1, 10)) { n => 
    Prop.collect(n) { n >= 0 && n < 10 } 
} 

Dann die gesammelten Werte wie folgt aussehen:

[info] ! Algorithm.Test: Falsified after 40 passed tests. 
[info] > ARG_0: -1 
[info] > Collected test data: 
[info] 17% 3 
[info] 17% 1 
[info] 15% 6 
[info] 12% 9 
[info] 10% 2 
[info] 10% 5 
[info] 7% 4 
[info] 7% 8 
[info] 2% -1 
[info] 2% 7 

Wo Sie können sehen, dass -1 hat während des Schrumpfprozesses verwendet.

+1

Aber das ist nicht das dokumentierte Verhalten. Wenn ich einen Generator zwischen 1 und 10 verwenden alle Werte müssen im Bereich [1,10 [. Niemals sollte eine -1 – tonicebrian

+2

@ancechu erscheinen Die '-1' erscheint nach dem Test fehlgeschlagen, da ScalaCheck versucht, einfachere Eingabe zu finden, die den Test nicht besteht - das ist die" Schrumpfung ". Diese Phase respektiert nicht den Generierungsprozess - ob das ein Fehler oder eine intrinsische Einschränkung ist, weiß ich nicht. –

+0

Ich sollte gestern gesucht haben, aber dieses Problem wird tatsächlich diskutiert [hier] (https://github.com/rickynils/scalacheck/issues/18) – Eric

Verwandte Themen