31

我正在使用 Scala 中的 BDD 的 Specs2 和 ScalaTest。当我断言不应该抛出给定的异常时,我已经在 Specs2 中写下了期望。

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

我希望能够在 ScalaTest 中编写等效的代码,例如:

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

但这不会编译,我找不到这样做的方法。这甚至可能吗?

提前谢谢了。

4

2 回答 2

71

当前版本的 ScalaTest 确实支持这一点:

noException should be thrownBy 0 / 1

请参阅文档

于 2016-01-06T23:51:02.653 回答
6

这在最新版本的 ScalaTest 中是不可能直接实现的,因为 的方法should没有EvaluatingApplicationShouldWrapper采用 a 的重载NotWord,只有采用 a 的重载ResultOfProduceInvocation[T]

我建议让不希望的异常发生,这将导致测试失败。这是经典的方式。

但是,如果您觉得需要更清楚地了解究竟是什么失败了,您可以使用try-catch块来处理错误。如果您捕获到您不希望发生的错误,请通过调用该fail方法来处理异常:

fail("That expression shouldn't have thrown a MyExceptionType exception")
于 2011-08-09T11:26:21.820 回答