如何使用ScalaTest执行OR

时间:2019-04-01 07:52:11

标签: logical-operators scalatest

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

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

大多数帖子正在检查同一变量上的“或”条件,即

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

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

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

但是,此指令无法编译,因为or不是assertion的成员。我尝试了几种带括号的语法,但是没有一个正在编译:

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

如何将这两个断言与OR结合在一起?

1 个答案:

答案 0 :(得分:0)

使用匹配器时失败的测试会抛出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