11

我使用 Specs BDD 库来编写 Scala 单元测试(http://code.google.com/p/specs)。在我的代码中,如果我想断言抛出 ClassNotFoundException 类型的异常,那么我可以编写以下代码代码:

a must throwA[ClassNotFoundException]

但是,我想测试相反的情况,即我想断言“不”抛出 ClassNotFoundException 类型的异常。

我尝试使用非否定匹配器,如下:

 a must throwA[ClassNotFoundException].not

但这没有用。我收到编译错误。那么,有什么方法可以断言例如 ClassNotFoundException 类型的异常不会被抛出?

请帮忙谢谢

4

4 回答 4

17

是的,编译时存在解析问题:

 a must throwA[ClassNotFoundException].not

您需要改为:

 a must not(throwA[ClassNotFoundException])
于 2011-03-17T00:34:40.577 回答
2

像这样的东西怎么样:

"An isSpaceNode function" should {
    "not fail with a Group" in {
       Group(<a/><b/>).isSpaceNode must not throwA(new UnsupportedOperationException)
    }
}
于 2011-02-08T12:31:51.800 回答
2

即使它没有回答您的问题,您也不必测试是否没有抛出异常。在这种情况下,您最好检查一下预期的结果是否正常......一旦执行了测试,就意味着它没有抛出异常。

于 2011-02-08T12:25:51.113 回答
2

如果表达式抛出除以下之外的任何内容,则下面的测试通过ClassNotFoundException

 must throwA[Exception].like {
    case m:  ClassNotFoundException => false
    case _ => true}

如果您只是想确保表达式不会抛出 ClassNotFoundException,为什么不直接使用 try-catch 块:

try{
         ...
    }catch{
        case m:  ClassNotFoundException => fail("ClassNotFoundException")
        case e => e.printStackTrace
}
于 2011-02-08T12:46:58.837 回答