JUnit одно и то же исключение в разных случаях - PullRequest
11 голосов
/ 15 марта 2010

Я пишу тест 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"));
}

Ответы [ 2 ]

34 голосов
/ 17 апреля 2011

Если у вас 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"));
}
4 голосов
/ 15 марта 2010

Вам нужно будет сделать это по старинке:

@Test
public void testRodneCisloRok() {
    try {
       new RodneCislo("891415",dopocitej("891415"));
       fail("expected an exception");
    } catch (IllegalArgumentException ex) {
       assertEquals("error1", ex.getMessage());
    }
}

Синтаксис @Test(expected=...) удобен, но во многих случаях он слишком прост.

Если важно различать условия исключений, вы можете рассмотреть возможность разработки иерархии классов исключений, которые могут быть специально отловлены. В этом случае подкласс IllegalArgumentException может быть хорошей идеей. Это возможно лучший дизайн, и ваш тест может поймать этот конкретный тип исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...