生成可以由 ScalaCheck 中的特定字符集编码的字符串

Generating Strings which can be encoded by a specific Charset in ScalaCheck

在我的 ScalaTest 测试中,我需要可以用 US-ASCII 编码的字符串。在使用默认的字符串生成器生成字符串后,我尝试检查它是否可以在该字符集中编码:

forAll { str: String =>
  StandardCharsets.US_ASCII.newEncoder().canEncode(str) ==> {
    // my test code is here
  }
}

但我得到一个错误:

Gave up after only 8 passed tests. 501 tests were discarded.

有没有简单的方法来生成可以用特定字符集编码的字符串?

您可以创建一个只生成有效字符的生成器

val usAsciiStringGen = Gen.containerOf[Array, Char](Gen.choose[Char](0,127)).map(_.mkString)

然后在测试中使用它:

val prop = forAll(usAsciiStringGen) { str: String =>
  ...
}

请注意,实际上不再需要检查,因为只会生成 US Ascii 字符串。