在我的测试中,我相当广泛地使用了Specs2 + ScalaCheck,并且有一些模式需要考虑。我仍然没有发现我的函数应该使用ArbitraryT还是GenT,因为它们非常相似:
sealed abstract class Arbitrary[T] {
val arbitrary: Gen[T]
}函数签名会是这样的吗:
maxSizedIntervalArbitrary[A,B](implicit ordering:Ordering[A], genStart:Arbitrary[A], genEnd:Arbitrary[B]):Arbitrary[TreeMap[A,B]]或者我应该在Gen抽象层工作?
发布于 2014-02-24 17:34:43
我会说两个都做:
def maxSizedIntervalArbitrary[A,B](genStart:Gen[A], genEnd:Gen[B])(implicit ordering:Ordering[A]):Gen[TreeMap[A,B]]
implicit def maxSizedIntervalArbitrary[A,B](implicit ordering:Ordering[A], genStart:Arbitrary[A], genEnd:Arbitrary[B]):Arbitrary[TreeMap[A,B]] =
Arbitrary(maxSizedIntervalArbitrary(arbitrary[A], arbitrary[B]))基本上,Arbitrary用于提供隐式Gen,因此这允许同时使用具有显式Gen和隐式Arbitrary的forAll变体。我不认为非implicit Arbitrary是有用的。
https://stackoverflow.com/questions/21982721
复制相似问题