Использование "НЕ должно выдавать синтаксис [exception]" в ScalaTest

Я играю с Specs2 и ScalaTest для BDD в Scala. Я написал ожидания в Specs2, когда утверждаю, что данное исключение не следует бросать.

"do something" in {
 {
   ....
 } must not(throwA[MyException])
}

Я надеялся написать эквивалент в ScalaTest, например:

"do something" in {
 evaluating {
   ....
 } should not produce[MyException]
}

Но это не компилируется, и я не мог найти способ сделать это. Возможно ли это?

Большое спасибо заранее.

Ответ 1

Это невозможно непосредственно в последней версии ScalaTest, потому что метод should of EvaluatingApplicationShouldWrapper не имеет перегрузки, которая принимает NotWord, только одну, которая принимает ResultOfProduceInvocation[T].

Я предлагаю просто разрешить нежелательное исключение, которое не пройдет тест. Это классический способ.

Но если вы чувствуете, что вам нужна более ясная информация о том, что не удалось точно, вы можете использовать блок try - catch для обработки ошибки. Если вы поймаете ошибку, которую вы не хотите, обработайте исключение вызовом метода fail:

fail("That expression shouldn't have thrown a MyExceptionType exception")

Ответ 2

Текущая версия ScalaTest поддерживает это:

noException should be thrownBy 0 / 1

См. docs.