Scalatest:组合断言

sul*_*man 4 testing scala scalatest

我刚刚开始使用 WordSpec,遇到了一个无法解决的问题。

我想在一个单元测试中断言两个单独的值。假设我有val result1val result2,我需要第一个采用特定值,第二个采用另一个特定值。

如果可以连接/减少/折叠断言,这将非常容易,但我认为我不能。也许是这样的:

result1 should be (1) ++ result2 should be (2)
Run Code Online (Sandbox Code Playgroud)

结果将是一个新的断言,只有当两个断言都为真时,该断言才为真。

如果我按如下方式编写它们,则只会采用最后一个值。

result1 should be (1)
result2 should be (2)
Run Code Online (Sandbox Code Playgroud)

有谁知道解决这个问题的方法吗?

skr*_*ger 5

对于 ScalaTest 3.0.1,我看到的两个选项是:

\n

1.) 使用元组(如 @krzysztof-at\xc5\x82asik 评论的那样)

\n
(result1, result2) should be (1, 2)\n
Run Code Online (Sandbox Code Playgroud)\n

2.) 使用Checkpoint

\n
val cp = new Checkpoint()\n\ncp { result1 should be (1) }\ncp { result2 should be (2) }\n\ncp.reportAll()\n
Run Code Online (Sandbox Code Playgroud)\n
\n

Checkpoint 类,它允许在测试中执行多个断言,并在测试结束时累积并报告所有失败。

\n
\n

-- ScalaTest 的检查点 scaladoc

\n

就我个人而言,我喜欢Checkpoint,因为它可以更好地区分所主张的内容。然而,我发现的一个潜在缺点是should be (x),与返回 不同AssertionCheckpoint#reportAll()返回Unit。我有一个需要 return 的方法Assertion,而我使用的解决方法是 return org.scalatest.Succeeded

\n

例如,

\n
def someMethod(): Assertion = {\n  ...\n  cp.reportAll()\n  Succeeded\n}\n
Run Code Online (Sandbox Code Playgroud)\n