如何在Junit测试用例中捕获包含异常?

时间:2015-08-07 15:18:33

标签: java junit

我有一个测试用例

@Test(expected = IllegalArgumentException.class)
public void test() throws Exception{
  ..test content...
}

因为我在测试用例中使用了Java Reflection,因此在InvocationTargetException中包含了IllegalArgumentException,如何捕获预期的IllegalArgumentException而不是InvocationTargetException。

错误消息显示为

java.lang.Exception: Unexpected exception, expected<java.lang.IllegalArgumentException> but was<java.lang.reflect.InvocationTargetException>
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)

2 个答案:

答案 0 :(得分:1)

我不相信JUnit这样做的方式 - 您可能必须在测试中手动完成,例如:

@Test
public void test() {
    try {
       runTest();
       fail();
    } catch (InvocationTargetException x) {
       if( ! (x.getCause() instanceof IllegalArgumentException)) {
           fail();
       }
    }
}

答案 1 :(得分:0)

您可以捕获InvocationTargetException并抛出IllegalArgumentException。