6

我想使用基于属性的测试和 scalacheck 来测试我的 scala 程序。我写 :

class MyProperties extends PropSpec with PropertyChecks {
    property("My property") {
        val myProperty: org.scalacheck.Prop = new MyProperty
        // some code I need to set myProperty
        myProperty.check
    }
}

但这似乎是错误的,因为当我使用 ScalaTest 运行此类时,我进入了控制台:

Run starting. Expected test count is: 1
MyProperties:

! Falsified after 51 passed tests.
> ARG_0: myGeneratedArgument
- My property
Run completed in 1 second, 623 milliseconds.
Total number of tests run: 1
Suites: completed 1, aborted 0
Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
All tests passed.

所以问题是:我的财产是伪造的,但测试通过了!?!有人看到我的代码有什么问题吗?

谢谢...

编辑:我试图调用 myProperty 而不是 myProperty.check,但这并没有好多少,因为这样,生成器似乎被忽略了(只启动了一个测试而不是一百个)。

4

2 回答 2

2

最终,我找到了一种编写测试的方法,Scalatest 考虑了这种方法。我使用 Checkers Trait 而不是 PropertyChecks:

class MyProperties extends PropSpec with Checkers {
    property("My property") {
        val myProperty: org.scalacheck.Prop = new MyProperty
        // some code I need to set myProperty
        Checkers.check(myProperty)
    }
}

我不确定这是最好的写法,但我得到了我想要的。本地:

*** FAILED ***
  GeneratorDrivenPropertyCheckFailedException was thrown during property evaluation.
   (MyProperties.scala:175)
    Falsified after 0 successful property evaluations.
    Location: (MyProperties.scala:175)
    Occurred when passed generated values (
      arg0 = myGeneratedArgument
    )

最后:

Run completed in 4 seconds, 514 milliseconds.
Total number of tests run: 1
Suites: completed 1, aborted 0
Tests: succeeded 0, failed 1, canceled 0, ignored 0, pending 0
*** 1 TESTS FAILED ***

如果有人可以评估这个提议,我会很高兴^^

于 2013-11-22T14:54:24.413 回答
1

在 ScalaTest 中,您需要使用 Checkers 或 PropertyChecks。如果您正在执行传统的 ScalaCheck 属性,并且看起来确实如此,那么您应该使用 Checkers(正如您所发现的那样)。我唯一要补充的是,您可以只说 check 而不是 Checkers.check:

class MyProperties extends PropSpec with Checkers {
    property("My property") {
        val myProperty: org.scalacheck.Prop = new MyProperty
        // some code I need to set myProperty
        check(myProperty)
    }
}

Checkers 的完整文档在这里:

http://doc.scalatest.org/2.0/index.html#org.scalatest.prop.Checkers

于 2013-11-26T15:22:18.890 回答