Java 如何在JUnit3中定制异常处理行为?

Java 如何在JUnit3中定制异常处理行为?,java,unit-testing,exception,junit,Java,Unit Testing,Exception,Junit,我想使用JUnit3实现异常检查(如JUnit4)。例如,我希望能够编写如下测试: public void testMyExceptionThrown() throws Exception { shouldThrow(MyException.class); doSomethingThatMightThrowMyException(); } 当且仅当抛出MyException时,此操作才会成功。 JUnit中有ExceptionTestCase类,但我希望每个test*方法都可

我想使用JUnit3实现异常检查(如JUnit4)。例如,我希望能够编写如下测试:

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

    doSomethingThatMightThrowMyException();
}
当且仅当抛出MyException时,此操作才会成功。 JUnit中有ExceptionTestCase类,但我希望每个test*方法都可以决定使用或不使用它。实现这一目标的最佳方法是什么?

解决方案是:

public void testMyExceptionThrown() throws Exception {
    try {
      doSomethingThatMightThrowMyException();
      fail("Expected Exception MyException");
    } catch(MyException e) {
      // do nothing, it's OK
    }
}
适合你的想法


还有一个例子,有人为JUnit3创建了一个代理解决方案,这似乎是解决您问题的另一种可能。

最简单的方法是使用executearound习惯用法来抽象出您通常编写的try-catch


更复杂的是要注意,
TestCase
只是一个
测试
。我忘记了细节,但我们可以覆盖测试的执行(框架最初通过
run(TestResult)
调用测试,该调用在
test
中指定)。在该覆盖中,我们可以根据Execute-Around放置try-catch。
testXxx
方法应该调用set方法来安装预期的异常类型。

不需要实现您自己的解决方案,因为已经有一个可以用于JUnit3(和任何其他测试框架):