2

如何编写一个Gen[A]永远不会返回相同对象两次的使用 ScalaCheck?

Gen.oneOf(a,b,c)

可以重复选择同一个对象,所以这是行不通的。

我在 specs2 中编​​写了一个可变规范,我想这样做的原因是,在某种意义上,被测系统的行为应该只允许每个对象“使用”一次。

编辑:“相同”我的意思是根据 相同==,并且对象实际上是字符串,所以我不能每次都创建相同的字符串。

4

1 回答 1

3

我不完全确定您在问什么,但是有一个称为生成器组合器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
于 2012-10-05T12:48:54.120 回答