在ScalaTest中使用“不应该生成[exception]”语法

时间:2011-08-09 10:40:21

标签: scala specs scalatest

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

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

我希望能够在ScalaTest中编写等效内容,如:

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

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

非常感谢提前。

2 个答案:

答案 0 :(得分:44)

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

noException should be thrownBy 0 / 1

请参阅docs

答案 1 :(得分:6)

这不可能直接在最新版本的ScalaTest中使用,因为should的方法EvaluatingApplicationShouldWrapper没有带NotWord的重载,只有一个ResultOfProduceInvocation[T] }}

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

但如果您觉得需要更准确地了解失败的原因,可以使用try - catch块来处理错误。如果你发现了你不想发生的错误,请通过调用fail方法来处理异常:

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