[英]How to use ScalaCheck's collect and classify in ScalaTest?
即使測試成功運行,以下使用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
}
}
})
}
}
一個古老的問題,可能早已回答或解決,但由於我是一個試圖找出繩索的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
}
}
}
請注意,該測試現在是一個擴展Properties
的object
。 Properties.property
val的類型為PropertySpecifier
,它封裝了可變狀態( Props
集合)並具有update
方法。 這條線
property("max") = forAll { ... }
是語法糖
property.update("max", forAll{ ... })
其中forAll
生成Prop
類型的值。 累積此Prop
值以供稍后使用隱式Arbitrary[Int]
生成器進行評估,以生成a
和b
測試值,這些測試值由collect
以便在測試結果中進行報告。
這是成功試運行的前幾行
+ AccountsSpectWithMarkup.max: OK, passed 100 tests.
> Collected test data:
4% (-2147483648,2147483647)
2% (1,2147483647)
2% (-1,-1)
2% (-1,0)
1% (-1,-1128775662)
1% (501893471,-2147483648)
1% (0,0)
1% (1529964222,-1507103054)
1% (36753817,-2147483648)
1% (2147483647,535423354
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.