如何编写一个Gen[A]
永远不会返回相同对象两次的使用 ScalaCheck?
Gen.oneOf(a,b,c)
可以重复选择同一个对象,所以这是行不通的。
我在 specs2 中编写了一个可变规范,我想这样做的原因是,在某种意义上,被测系统的行为应该只允许每个对象“使用”一次。
编辑:“相同”我的意思是根据 相同==
,并且对象实际上是字符串,所以我不能每次都创建相同的字符串。
如何编写一个Gen[A]
永远不会返回相同对象两次的使用 ScalaCheck?
Gen.oneOf(a,b,c)
可以重复选择同一个对象,所以这是行不通的。
我在 specs2 中编写了一个可变规范,我想这样做的原因是,在某种意义上,被测系统的行为应该只允许每个对象“使用”一次。
编辑:“相同”我的意思是根据 相同==
,并且对象实际上是字符串,所以我不能每次都创建相同的字符串。
我不完全确定您在问什么,但是有一个称为生成器组合器Gen.wrap
,每次评估生成器本身时都会评估其参数。这样,您可以强制创建新对象。请参见下面的示例(请注意,如果需要,您可以跳过使用Gen.value
隐式转换,而是依赖隐式转换A => Gen[A]
):
scala> import org.scalacheck._
import org.scalacheck._
scala> class A
defined class A
scala> val g1: Gen[A] = Gen.value(new A)
g1: org.scalacheck.Gen[A] = Gen()
scala> g1.sample.get
res0: A = A@45243a0f
scala> g1.sample.get
res1: A = A@45243a0f
scala> val g2: Gen[A] = Gen.wrap(Gen.value(new A))
g2: org.scalacheck.Gen[A] = Gen()
scala> g2.sample.get
res2: A = A@331d4d66
scala> g2.sample.get
res3: A = A@728aed09