2015-08-07 3 views
0

У меня есть тестовый пример, какКак поймать исключенное исключение в тестовом случае Junit?

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

Так как я использую Java Reflection в моем тестовом случае так IllegalArgumentException является enwrapped в InvocationTargetException, как я могу поймать ожидать 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) 
+0

Problably ответ уже там, но лично я бы просто реализовать пользовательский сопоставитель hamcrest, который проверяет, является ли причина IllegalArgumentException, а затем использовать правило ExpectedException для его использования. –

ответ

1

Я не верю, что есть JUnit способ сделать это - вы, вероятно, придется сделать это вручную в тесте, например:

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

Утверждение может быть уточнено с помощью 'assertTrue (expected.getCause() instanceof IllegalArgumentException);' –

+0

Уродливый ад. Используя правило ExpectedException (назовем его «expectedException»), вы могли бы просто написать ... 'expectedException.expect (hasCause (IllegalArgumentException.class));' просто реализуя Matrix HasCause hamcrest. –

+1

Ну, если вы хотите потащить другие библиотеки, https://code.google.com/p/catch-exception/ еще много. – BarrySW19

0

Вы могли поймать InvocationTargetException и бросить IllegalArgumentException.

Смежные вопросы