JUnit такое же исключение в разных случаях
Я пишу тест jUnit для конструктора, который анализирует строку, а затем проверяет множество вещей. Когда есть неправильные данные, для каждой вещи бросается некоторое IllegalArgumentException с другим сообщением.
Поэтому я хотел бы написать тесты для него, но как я могу узнать, какая ошибка была выбрана?
Вот как я могу это сделать:
@Test(expected=IllegalArgumentException.class)
public void testRodneCisloRok(){
new RodneCislo("891415",dopocitej("891415"));
}
и именно так я хотел бы быть, но я не знаю, можно ли это как-то написать:
@Test(expected=IllegalArgumentException.class("error1"))
public void testRodneCisloRok(){
new RodneCislo("891415",dopocitej("891415"));
}
Ответы
Ответ 1
Вам нужно будет сделать это старомодно:
@Test
public void testRodneCisloRok() {
try {
new RodneCislo("891415",dopocitej("891415"));
fail("expected an exception");
} catch (IllegalArgumentException ex) {
assertEquals("error1", ex.getMessage());
}
}
Синтаксис @Test(expected=...)
удобен, но во многих случаях он слишком прост.
Если важно различать условия исключения, вы можете рассмотреть возможность создания иерархии классов исключений, которые могут быть пойманы специально. В этом случае подкласс IllegalArgumentException
может быть хорошей идеей. Это, возможно, лучший дизайн, и ваш тест может поймать этот особый тип исключения.
Ответ 2
Если у вас JUnit 4.7 или выше, вы можете использовать этот (элегантный) способ:
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testRodneCisloRok(){
exception.expect(IllegalArgumentException.class);
exception.expectMessage("error1");
new RodneCislo("891415",dopocitej("891415"));
}