Я проверил ответы, указанные в посте Как правильно проверить Try [T] с помощью ScalaTest?
Но если бы мне пришлось делать какие-либо утверждения после вызова функции или если мне нужно проверить утверждения в блоке for { } yield { }
, то я следую приведенному ниже подходу:
def test(a: Int, b: Int): Try[Int] = Try {
a / b
}
it.should("succeed").in {
(for {
res <- test(0, 1)
} yield {
assert(res === 0)
// assume more assertions are to be made
}) match {
case Success(value) => value
case Failure(exception) => fail(exception)
}
}
it.should("fail").in {
test(1, 0).failure.exception.getClass.mustBe(classOf[java.lang.ArithmeticException])
}
Проблема с вышеприведенным подходом заключается в том, что в случае успеха, если какая-либо проблема возникает в модульный тест logi c, тогда он покажет ошибку, указывающую на строку case Failure(exception) => fail(exception)
, а не на строку, где произошла фактическая ошибка. Если контрольный пример огромен, то пользователю будет трудно найти, где именно произошла ошибка.
Так что есть лучший способ для модульного тестирования функций, которые возвращают Try[T]
, не перемещая утверждения вне блока for { } yield { }
?