我正在尝试将 ScalaTest 与 ScalaCheck 一起使用来进行基于属性的测试。我有下面列出的测试:
import org.scalatest.prop.PropertyChecks
import org.scalatest.{FlatSpec, Matchers}
object Calc {
def add(a:Int, b:Int) = a+b
def div(a:Int, b:Int) = a/b
}
class PropSpec1 extends FlatSpec with Matchers with PropertyChecks {
behavior of Calc.getClass.getName
it should "add integers" in {
forAll { (a: Int, b: Int) =>
Calc.add(a, b) shouldEqual a + b
}
}
it should "divide integers" in {
forAll {
(a:Int, b:Int) => Calc.div(a, b) shouldEqual a/b
}
}
}
现在我看到的是,如果我一遍又一遍地在 PropSpec1 中运行测试,有时第二个测试会通过,但大多数时候它会失败。现在,如果 0 没有针对 b 进行测试,那么显然它会通过,但我认为这是它总是会尝试的事情之一。重复运行 sbt clean test 时,我看到了相同的行为;有时两个测试都通过。
这对于基于属性的测试是正常的,还是我需要做一些事情(比如总是提供我自己的生成器)?