我有一个生成器,可以创建一个非常复杂的对象。我无法通过类似的方式创建该对象
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
,那是随机的吗?
答案 0 :(得分:0)
我已经能够解决该问题。解决方案绝对不是优雅的,但这是我解决问题的唯一方法。
我已将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()
现在我可以在realComplexGen
中使用forAll
了,该对象实际上是随机的。