Как я могу выполнить ИЛИ с помощью ScalaTest - PullRequest
1 голос
/ 01 апреля 2019

Я хочу логически объединить два утверждения 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))

Как я могу объединить эти два утверждения с ИЛИ?

1 Ответ

0 голосов
/ 01 апреля 2019

Неудачные тесты выдают 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
...