如何使用 scalacheck 轻松生成多头?

How to easily generate longs with scalacheck?

我试过了

  val arbLong: Gen[Long] = {
    Gen.frequency((20, Arbitrary.arbLong), (20, null)).sample.get.arbitrary
  }


  "arbLong" should "be able to generate null values" in {
    forAll(arbLong) { (generatedLong: Long) =>
      println(generatedLong)
    }

  }

所以它确实为 long 生成一个 null,但是我得到 NullPointerException 最有可能是因为 Long 无法保存 null 使用任意长生成器的正确方法是什么包括 nulls?

Scala 的 Long 不能为空 (Pass null to a method expects Long)。如果你想表示可能存在或不存在的 Long,请使用 java.lang.Long:

val arbLong: Gen[java.lang.Long] = {
  Gen.frequency((20, Arbitrary.arbLong), (20, null)).sample.get.arbitrary
}

Option[Long](参见Generate Option[T] in ScalaCheck)。