scala - 在另一个生成器中使用 ScalaCheck 生成器
问题描述
我有一个生成器,可以创建一个非常复杂的对象。我无法通过类似的东西创建这个对象
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
为 a 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
在 a中使用,forAll
并且对象真的是随机的。
推荐阅读
- list - 将列表传递给 get call Rest-Assured
- ios - 从城市名称获取地理位置
- python - 创建条形图但仅获得 TypeError 大小为 1 的数组可以转换为 Python 标量
- laravel - Laravel Livewire,表单提交:先做点事,然后提交表单
- python - 当我在 python 中制作 docker 图像时找不到导入的模块
- php - AJAX 按钮切换只工作一次,直到页面刷新
- excel - 从特定单元格开始图表,每当我插入新值时,它应该自动更新图表
- python - 在 Django Rest Framework 中通过 Vendor 的 Foregin 键获取所有项目
- android - 没有抛出这样的 Methoderror。方法 + 在 null 上被调用
- angular - 将枚举项传递给模板中的子组件