我使用Specs BDD库编写Scala单元测试(http://code.google.com/p/specs) 在我的代码中,如果我想断言抛出ClassNotFoundException类型的异常,那么我可以编写以下代码:
a must throwA[ClassNotFoundException]
但是,我想测试相反的情况,即我想断言“不会”抛出ClassNotFoundException类型的异常。
我尝试使用非否定匹配器,如下所示:
a must throwA[ClassNotFoundException].not
但那没有用。我收到编译错误。那么,有什么办法可以断言例如ClassNotFoundException类型的异常不被抛出?
请帮助 谢谢
答案 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
}