如何在JUnit 3中自定义异常处理行为?

时间:2009-03-10 11:45:51

标签: java unit-testing exception junit

我想使用JUnit 3实现异常检查(比如在JUnit 4中)。例如,我希望能够编写这样的测试:

public void testMyExceptionThrown() throws Exception {
    shouldThrow(MyException.class);

    doSomethingThatMightThrowMyException();
}

当且仅当抛出MyException时,这应该成功。 JUnit中有ExceptionTestCase类,但我想要一些每个test *方法可以决定使用或不使用的东西。实现这一目标的最佳方法是什么?

3 个答案:

答案 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方法来安装预期的异常类型。