我想使用JUnit 3实现异常检查(比如在JUnit 4中)。例如,我希望能够编写这样的测试:
public void testMyExceptionThrown() throws Exception {
shouldThrow(MyException.class);
doSomethingThatMightThrowMyException();
}
当且仅当抛出MyException时,这应该成功。 JUnit中有ExceptionTestCase类,但我想要一些每个test *方法可以决定使用或不使用的东西。实现这一目标的最佳方法是什么?
答案 0 :(得分:9)
解决方案是否可以:
public void testMyExceptionThrown() throws Exception {
try {
doSomethingThatMightThrowMyException();
fail("Expected Exception MyException");
} catch(MyException e) {
// do nothing, it's OK
}
}
适合你的想法吗?
另请查看this thread,其中有人为JUnit3创建了代理解决方案,这似乎是解决问题的另一种可能性。
答案 1 :(得分:2)
没有必要实现自己的解决方案,因为已经可以使用JUnit3(和任何其他测试框架):catch-exception。
答案 2 :(得分:1)
最简单的方法是使用Execute Around成语来抽象出你通常会写的try-catch。
更复杂的是要注意TestCase
只是Test
。我忘记了细节,但我们可以覆盖测试的执行(框架最初通过run(TestResult)
中指定的Test
调用)。在该覆盖中,我们可以根据Execute Around放置try-catch。 testXxx
方法应该调用set方法来安装预期的异常类型。