即使测试成功运行,Prop.collect((a, b))
的以下使用也不会按预期打印统计信息。
import org.scalacheck.Prop
import org.scalatest.{GivenWhenThen, PropSpec}
import org.scalatest.prop.{Checkers, GeneratorDrivenPropertyChecks}
import org.scalacheck.Prop.AnyOperators
class AccountSpecWithMarkup extends PropSpec with Checkers with GeneratorDrivenPropertyChecks {
property("max") {
check({
(a:Int, b:Int) => {
Prop.collect((a, b)) {
a != b || a == b
}
}
})
}
}
答案 0 :(得分:1)
一个古老的问题,可能很久以来就已经回答或解决了,但是由于我是一个试图弄清楚问题的scalacheck新手,所以我会自愿做出回应。
不知道为什么您的示例无法按预期运行,但是这个更简单的测试可以解决问题(在Scalacheck 1.14中):
import org.scalacheck.Properties
import org.scalacheck.Prop.{forAll,collect}
object AccountSpecWithMarkup extends Properties("AccountSpecWithMarkup") {
property("max") = forAll { (a: Int, b: Int) =>
collect((a, b)) {
a != b || a == b
}
}
}
请注意,测试现在是扩展object
的{{1}}。 Properties
val类型为Properties.property
,它封装了可变状态(PropertySpecifier
的集合),并具有Props
方法。这行
update
是...的语法糖
property("max") = forAll { ... }
其中property.update("max", forAll{ ... })
生成类型为forAll
的值。累积此Prop
值,以供以后使用隐式Prop
生成器生成Arbitrary[Int]
和a
的测试值,这些测试值由b
收集以在报告中报告。测试结果。
这是成功进行测试的前几行
collect