如何使用 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
我想用 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