2015-03-22 7 views
-2

Ниже приведен мой код.ExpectedException.expect не работает. junit

@Rule 
private ExpectedException m_exception = ExpectedException.none(); 



@Test 
public void testDecode() 
{ 
    m_exception.expect(IllegalArgumentException.class); 
    throw new IllegalArgumentException(); 

} 

Когда я запускаю этот тест, он выходит из строя,

[junit] java.lang.IllegalArgumentException 
[junit]  at com.sonicsw.mf.framework.util.test.URLUtilityTest.testDecode(URLUtilityTest.java:60) 
[junit]  at org.eclipse.ant.internal.launching.remote.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) 
[junit]  at org.eclipse.ant.internal.launching.remote.InternalAntRunner.run(InternalAntRunner.java:424) 
[junit]  at org.eclipse.ant.internal.launching.remote.InternalAntRunner.main(InternalAntRunner.java:138) 

Любая идея, что я делаю неправильно здесь?

+1

Я уверен, это не * самый короткий код * для демонстрации проблемы из-за этого: 'URLUtilityTest.java: 60'. В вашем тесте есть еще какой-то дополнительный код, который бросает целую картину. – Andremoniy

+0

В классе URLUtilityTest есть много других тестовых примеров, и они не вызывают никаких проблем, кроме этого. –

+1

Удалите все неприменимые методы тестирования, бит do.include остальная часть класса, включая аннотации классов (и убедитесь, что он все еще сломан) – NamshubWriter

ответ

3

Не уверен относительно выложенной стоп-трассы, но я думаю, что @Rule аннотированные поля должны быть public.

+0

Такая же ошибка с публикацией. –

+0

@ Комментарий Ахмада.Масуда adent абсолютно прав. Ваш код с модификатором 'public' для' @ Rule' отлично работает. – Andremoniy

+0

Я сделал это общедоступным, и результат такой же –

-2

Я считаю, что вы должны были аннотировать сам тест, чтобы сказать ему, что он будет ожидать этого типа исключения.

Попробуйте заменить свою аннотацию @Test на @Test(expected=IllegalArgumentException.class) и посмотреть, не работает ли она для вас.

+0

Использование аннотации старое, использование «@Rule ExpectedException» - это новый способ (и предлагает более конкретные способы утверждения). –

1

Методы и поля, аннотированные @Rule, должны быть общедоступными. Также ваш тестовый класс не должен распространяться прямо или косвенно на junit.framework.TestCase (поэтому тесты не будут выполняться как тесты в стиле JUnit3). Я также рекомендую всегда комментировать тесты в стиле JUnit4 с помощью @RunWith

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