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

时间:2016-04-18 22:55:52

标签: scala character-encoding scalacheck

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

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

但是我收到了错误:

  

仅通过8次测试后才放弃。 501测试被丢弃。

是否有一种简单的方法来生成可以在特定字符集中编码的字符串?

1 个答案:

答案 0 :(得分:3)

您可以创建仅生成有效字符的生成器

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

然后在测试中使用它:

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

请注意,由于只生成US Ascii字符串,因此不再需要检查。