Scala的Specs BDD库中的异常匹配器

时间:2011-02-08 12:17:51

标签: scala bdd specs

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

a must throwA[ClassNotFoundException]

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

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

 a must throwA[ClassNotFoundException].not

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

请帮助 谢谢

4 个答案:

答案 0 :(得分:17)

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

 a must throwA[ClassNotFoundException].not

你需要写一下:

 a must not(throwA[ClassNotFoundException])

答案 1 :(得分:2)

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

答案 2 :(得分:2)

这样的事情怎么样:

"An isSpaceNode function" should {
    "not fail with a Group" in {
       Group(<a/><b/>).isSpaceNode must not throwA(new UnsupportedOperationException)
    }
}

答案 3 :(得分: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
}