我一起使用 ScalaTest 和 Scalacheck。这是我的惰性对(它不起作用,因为这里我们得到 Gen[(Int, Int)] 作为结果而不是 Tuples2 所以我不能使用模式匹配):
private lazy val (startInterval, endInterval) =
for {
start <- Gen.choose(-10000, 10000)
end <- Gen.choose(-10000, 10000) if end > start
} yield (start, end)
为了使用 forAll 的两个参数,我想以这种方式使用上面提到的两个 val:
forAll (endInterval, startInterval) { (start: Int, end: Int) =>
assert(sumOfCubes(start, end) === 0)
}
我可以通过这种方式创建一个 Gen[(Int, Int)]:
private lazy val genPairs =
for {
start <- Gen.choose(-10000, 10000)
end <- Gen.choose(-10000, 10000) if end > start
} yield (start, end)
但在那之后,我无法通过名称访问元素。
长时间使用 scalacheck 可能是一个简单的问题,但我只是一个初学者并尝试了很多解决方案,所以知道如何解决这个问题吗?
编辑: 一种解决方案可能是在任何时候使用:
private lazy val startInterval = Gen.choose(-10000, 10000)
private lazy val endInterval = Gen.choose(-10000, 10000)
和:
forAll (startInterval, endInterval) { (start: Int, end: Int) =>
whenever(start > end) {
assert(sumOfCubes(start, end) === 0)
}
}
但是,当所有生成的开始和结束都不满足条件时,就会有测试失败的可能性。所以它几乎不是最好的解决方案(或者至少是一个好的解决方案)。