我正在尝试将ScalaCheck集成到specs2中的单位规格中。我一定不知道它是如何工作的:
class TestCase extends PlaySpecification with ScalaCheck {
"The container data model" should {
val validIdRange = Gen.choose(1,GPDataTypes.integer._2)
def chk(n: Int, d: Int) = {
val g = new GPGlimple(n, true, true)
g.accountId mustEqual 1 // should fail (actually equals n)
g.id must beNone
g.created must beNone
}
val idPairs = forAll(validIdRange, validIdRange) { (n: Int, d: Int) => chk(n, d) }
"support basic glimple constructors" in {
idPairs.check
}
}
}
但是,此测试执行没有失败。它绝对应该在'mustEqual 1'上失败(我故意改为1,它实际上等于n)。然而,测试结果中的结果......
[info] glimple容器数据模型应该 [info] +支持基本的glimple构造函数
答案 0 :(得分:0)
好的,我们在关于.check的弃用以及ScalaCheck和specs2如何协同工作的几点之后想出来了。
这是我结束的地方:
class TestGlimpleModel extends PlaySpecification with ScalaCheck {
"The glimple container data model" should {
val validIdRange = Gen.choose(1, GPDataTypes.integer._2)
val invalidIdRange = Gen.choose(GPDataTypes.integer._1, 0)
val booleanRange = Gen.oneOf(true, false)
"construct with valid id, created, and account parameters" in {
forAll(validIdRange, validIdRange, booleanRange, booleanRange) { (n: Int, m: Int, b: Boolean, c: Boolean) =>
( Try { new GPGlimple(Option(GPID(n)), Option(new DateTime), GPID(m), b, c) } must beSuccessfulTry )
}
}
"throw exceptions if the id or account parameters are invalid" in {
forAll(invalidIdRange, invalidIdRange, booleanRange, booleanRange) { (n: Int, m: Int, b: Boolean, c: Boolean) =>
( Try { new GPGlimple(Option(GPID(n)), Option(new DateTime), GPID(m), b, c) } must beFailedTry )
}
}
}
}
也许不是最优雅的,但我刚刚开始使用ScalaCheck。这似乎更接近预期的API。
我创建了几个生成有效或无效ID随机集的生成器,以及一组随机的布尔值。然后,这两个测试用例尝试从Try {}中的数据创建我们的对象,并检查成功或失败(视情况而定)。
我还在研究的一件事是弄清楚如何生成随机的苏打时DateTime实例。还没有能够正确地得到语法......