如何使用 ScalaTest 执行 OR

How can I perform an OR with ScalaTest

我想用 OR 运算符在逻辑上连接两个 ScalaTest 断言。

事实是,这两个断言检查的是完全不同的东西。在类似的帖子中有一些使用 or 的示例,但这不是我想要做的。

大多数帖子都在检查 OR 条件 同一变量,即

actual should (be (a [RuntimeException]) or be (a [Thread]))

但我想加入完全不同的东西,即

actual should (be (a [RuntimeException]) or somethingElse should be(0)

然而,这条指令不编译,因为or不是assertion的成员。我尝试了几种带括号的语法,但其中 none 正在编译:

(count should be(0)) or (isCentroid should be(true))
(count should be(0)) || (isCentroid should be(true))

如何用 OR 加入这两个断言?

使用匹配器时失败的测试抛出 TestFailedException,因此我们可以将断言包装在 Try 中,然后使用标准的 Scala 逻辑运算符,如下所示:

val P1 = Try(count should be(0)).isSuccess
val P2 = Try(isCentroid should be(true)).isSuccess
assert (P1 || P2)

失败时我们应该看到如下内容:

P1 was false, and P2 was false
ScalaTestFailureLocation: example.HelloSpec at (HelloSpec.scala:29)
org.scalatest.exceptions.TestFailedException: P1 was false, and P2 was false