【问题标题】:scalacheck: lift custom random generatorscalacheck:提升自定义随机生成器
【发布时间】:2021-06-19 08:10:14
【问题描述】:

是否可以将自定义生成函数提升为Gen

例如为mongo生成ObjectIds。

import org.mongodb.scala.bson.ObjectId
import org.scalacheck.Gen

val genObjectId: Gen[ObjectId] = Gen.lift(() => new ObjectId)

我发现的only possible solution 可以像这样破解生成器:

val genObjectId: Gen[ObjectId] = Gen.numChar.map(_ => new ObjectId)

使用Gen.hexChar 生成ObjectIds 无关紧要,因为:

  • 我每次都需要唯一的价值
  • Mongo 可以将某些生成的十六进制字符串视为无效

【问题讨论】:

    标签: scala testing scalatest scalacheck


    【解决方案1】:
    Gen.delay(Gen.const(new ObjectId))
    

    delay 的参数是按名称命名的,因此每次尝试生成值都会构造一个新的ObjectId

    【讨论】:

    • 像魅力一样工作,谢谢!此外,只需Gen.delay(new ObjectId) 就足以进行implicit def const[T](x: T): Gen[T] 转换。
    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2010-12-10
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多