【发布时间】:2011-05-21 17:06:28
【问题描述】:
我正在尝试使用 scalacheck 1.6.6 和规范 1.7 (scala 2.8.1) 创建一个生成(非零长度)合法 unicode 字符串的生成器。
我希望我可以创建像这样的生成器:
object Generators {
def unicodeChar: Gen[Char] =
choose(Math.MIN_CHAR, Math.MAX_CHAR).map(_.toChar).filter(
c => Character.isDefined(c))
def unicodeStr: Gen[String] = for(cs <- listOf1(unicodeChar)) yield cs.mkString
}
...然后从以下规格中使用它们:
import org.specs.Specification
import org.specs.matcher.ScalaCheckMatchers
object CoreSpec extends Specification with ScalaCheckMatchers {
"The core" should {
"pass trivially" in {
Generators.unicodeStr must pass((s: String) => s == s)
}
}
}
但是,似乎在 unicodeChar 中使用过滤器会导致问题:
Specification "CoreSpec"
The core should
x pass trivially
Gave up after only 64 passed tests. 500 tests were discarded.
如果我从 unicodeChar 中删除过滤器,我的测试会通过,但我稍后会遇到其他问题,因为我的字符串并不总是定义明确的 unicode。
在此先感谢您提供有关如何实现此目的的任何建议。
【问题讨论】:
-
如果我不使用 Specs 似乎会更容易一些,并提供一个新的隐式 Params 实例。但这只是治标不治本,并不能真正解决根本原因。
标签: scala specs scalacheck