0

我正在尝试将 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 构造函数

4

1 回答 1

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 实例。还没有能够完全正确地获得语法......

于 2015-05-16T01:43:52.187 回答