在另一个生成器中使用 ScalaCheck 生成器
Use ScalaCheck generator inside another generator
我有一个生成器可以创建一个非常复杂的对象。我不能通过类似
的方法创建这个对象
val myGen = for{
a <- Gen.choose(-10,10)
...
} yield new MyClass(a,b,c,...)
我尝试了一种像这样创建自定义生成器的方法
val myComplexGen :Gen[ComplexObject] = {
...
val myTempVariable = Gen.choose(-10,10)
val otherTempVal = Gen.choose(100,2000)
new MyComplexObject(myTempVariable,otherTempVal,...)
}
然后
test("myTest") {
forAll(myComplexGen){ complexObj =>
... // Here, complexObj.myTempVariable is always the same through all the iterations
}
}
虽然这有效,但生成的值始终相同。内部 Gen.choose
总是产生相同的值。
有什么方法可以让我用自己的逻辑编写自定义 Gen
,并在里面使用内部 Gen.choose
,那将是随机的?
我已经解决了这个问题。该解决方案绝对不优雅,但这是我解决问题的唯一方法。
我已将 myComplexGen
转换为 def
,并在另一个 gen 中使用虚拟变量调用它
def myComplexGen :ComplexObject = {
...
val myTempVariable = Gen.choose(-10,10)
val otherTempVal = Gen.choose(100,2000)
new MyComplexObject(myTempVariable,otherTempVal,...)
}
val realComplexGen :Gen[ComplexObject] = for {
i <- Gen.choose(0,10) // Not actually used, but for cannot be empty
} yield myComplexGen()
现在我可以在 forAll
中使用 realComplexGen
并且对象真的是随机的。
我有一个生成器可以创建一个非常复杂的对象。我不能通过类似
的方法创建这个对象val myGen = for{
a <- Gen.choose(-10,10)
...
} yield new MyClass(a,b,c,...)
我尝试了一种像这样创建自定义生成器的方法
val myComplexGen :Gen[ComplexObject] = {
...
val myTempVariable = Gen.choose(-10,10)
val otherTempVal = Gen.choose(100,2000)
new MyComplexObject(myTempVariable,otherTempVal,...)
}
然后
test("myTest") {
forAll(myComplexGen){ complexObj =>
... // Here, complexObj.myTempVariable is always the same through all the iterations
}
}
虽然这有效,但生成的值始终相同。内部 Gen.choose
总是产生相同的值。
有什么方法可以让我用自己的逻辑编写自定义 Gen
,并在里面使用内部 Gen.choose
,那将是随机的?
我已经解决了这个问题。该解决方案绝对不优雅,但这是我解决问题的唯一方法。
我已将 myComplexGen
转换为 def
,并在另一个 gen 中使用虚拟变量调用它
def myComplexGen :ComplexObject = {
...
val myTempVariable = Gen.choose(-10,10)
val otherTempVal = Gen.choose(100,2000)
new MyComplexObject(myTempVariable,otherTempVal,...)
}
val realComplexGen :Gen[ComplexObject] = for {
i <- Gen.choose(0,10) // Not actually used, but for cannot be empty
} yield myComplexGen()
现在我可以在 forAll
中使用 realComplexGen
并且对象真的是随机的。