在我的ScalaTest测试中,我需要可以用US-ASCII编码的字符串。在使用字符串的默认生成器生成字符串后,我尝试检查字符串是否可以在该字符集中编码:
forAll { str: String =>
StandardCharsets.US_ASCII.newEncoder().canEncode(str) ==> {
// my test code is here
}
}
但是我收到了错误:
仅通过8次测试后才放弃。 501测试被丢弃。
是否有一种简单的方法来生成可以在特定字符集中编码的字符串?
答案 0 :(得分:3)
您可以创建仅生成有效字符的生成器
val usAsciiStringGen = Gen.containerOf[Array, Char](Gen.choose[Char](0,127)).map(_.mkString)
然后在测试中使用它:
val prop = forAll(usAsciiStringGen) { str: String =>
...
}
请注意,由于只生成US Ascii字符串,因此不再需要检查。