2016-08-01 14 views
2

Ich versuche, sicherzustellen, dass meine ScalaCheck-Eigenschaft 500 Mal statt der Standard 100 Mal ausgeführt wird. Ich habe Probleme, dies zu konfigurieren.ScalaCheck specificy minimale erfolgreiche Tests für Eigenschaft

class BlockSpec extends Properties("BlockSpec") with BitcoinSLogger { 

    val myParams = Parameters.default.withMinSuccessfulTests(500) 
    override def overrideParameters(p: Test.Parameters) = myParams 

    property("Serialization symmetry") = 
    Prop.forAll(BlockchainElementsGenerator.block) { block => 
    logger.warn("Hex:" + block.hex) 
    Block(block.hex) == block 
    } 
} 

Jedoch, wenn ich tatsächlich diesen Test ausführen es nur sagt 100 Tests erfolgreich bestanden

EDIT:

$ sbt 
[info] Loading project definition from /home/chris/dev/bitcoins-core/project 
[info] Set current project to bitcoin-s-core (in build file:/home/chris/dev/bitcoins-core/) 
> test-only *BlockSpec* 
[info] + BlockSpec.Serialization symmetry: OK, passed 100 tests. 
[info] Elapsed time: 1 min 59.775 sec 
[info] ScalaCheck 
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 
[info] ScalaTest 
[info] Run completed in 2 minutes. 
[info] Total number of tests run: 0 
[info] Suites: completed 0, aborted 0 
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0 
[info] No tests were executed. 
[info] Passed: Total 1, Failed 0, Errors 0, Passed 1 
[success] Total time: 123 s, completed Aug 1, 2016 11:36:17 AM 
> 

Wie kann ich das eigentlich mein Eigentum übergeben?

+0

ich denke, Sie rufen das von sbt? Können Sie uns zeigen, wie Sie diese Eigenschaft nennen? und vielleicht versuchen Sie es mit 'property.check' von einer REPL? – jopasserat

+0

Ich benutze sbt, ich werde den Befehl hinzufügen, um das OP –

+0

Sieht aus wie wenn ich es von der Konsole laufen bekomme ich nur 100 Tests bestanden auch scala> res1._2.check + OK, bestanden 100 Tests.' –

Antwort

1

Soweit ich verstehe, können Sie die Testparameter auf zwei Ebenen angeben und sie scheinen nicht zu kommunizieren.

Die erste Option ist innerhalb der Eigenschaft, wie Sie zu tun versuchen:

import org.scalacheck.Properties 
import org.scalacheck.Test.{ TestCallback, Parameters } 
import org.scalacheck.Prop.{ forAll, BooleanOperators } 
import org.scalacheck.Test 

class TestFoo extends Properties("BlockSpec") { 

    override def overrideParameters(p: Parameters) = 
    p.withMinSuccessfulTests(1000000) 

    property("Serialization symmetry") = forAll { n: Int => 
    (n > 0) ==> (math.abs(n) == n) 
    } 

} 

Dies wird so lange keine Auswirkungen haben, da Sie nicht .check auf dem Grundstück nennen. Kann von der sbt Shell oder direkt innerhalb der Klasse sein.

Nun, wenn Sie die Anzahl der Tests beeinflussen wollen laufen, wenn der sbt:test Ziel aufrufen, die es Sie mit Optionen spielen haben scheint build.sbt (von here genommen):

name := "scalacheck-demo" 

scalaVersion := "2.11.5" 

libraryDependencies += "org.scalacheck" %% "scalacheck" % "1.12.2" % "test" 

testOptions in Test += Tests.Argument(TestFrameworks.ScalaCheck, "-maxSize", "5", "-minSuccessfulTests", "33", "-workers", "1", "-verbosity", "1") 
+0

auszuführen. Dies scheint keine Einstellungen pro Test oder pro Eigenschaft zuzulassen ? – nafg

0

Es ist auf jeden Fall ein einfacher Weg zu erreichen das als überschreiben irgendeine Art von globalen Test Config:

class SampleTest extends FlatSpec 
    with Matchers with GeneratorDrivenPropertyChecks { 

    it should "work for a basic scenario" in { 
    // This will require 500 successful tests to succeed 
    forAll(minSuccessful(500)) { (d: String) => 
     whenever (d.nonEmpty) { 
     d.length shouldBe > 0 
     } 
    } 
    } 
} 
+0

Sieht aus, als ob Sie ScalaTest verwenden? –

+0

Hi @ChrisStewart ja, das war nur ein Beispiel, das DSL ist nicht ScalaTest-spezifisch, zumindest nicht die forAll-Seite. – flavian

+0

Wie funktioniert das mit einem expliziten Generator in der 'Prop.forAll()' Funktion? –