2016-11-18 4 views
1

Начну с примера кода; Я должен проверить функцию, которая обрабатывает пакеты данных. В этой функции пакет данных открывается и когда он не содержит всех ожидаемых данных, генерируется InvalidParameterExeption, который регистрируется.Тест, если исключение поймано с помощью Junit

public void handleData(dataPacket) { 
    try { 
     analyseData(dataPacket); 
    } catch (InvalidParameterException e) { 
     e.printStackTrace() 
    } 
} 

Итак, если все пойдет хорошо, мое исключение напечатано в моем терминале. Но как я могу проверить это? Я не могу использовать это: (так как исключение перехватывается)

@Test(expected = InvalidParameterExeption.class) 
public void testIfFaultyDataPacketIsRecognised { 
    handleData(faultyDataPacket); 
} 

Как я могу проверить, что InvalidParameterExeption брошено?

+0

Либо вы не должны поймать исключение, либо вы должны удалить @expected annotation и выяснить что-то еще для актива. Печать трассировки стека не очень хорошо обрабатывает исключение. Тот факт, что вы запутались в том, что делать, - это намек на то, как чувствуют себя клиенты вашего класса, когда есть плохой пакет данных, и они понятия не имеют, что делать. – duffymo

+0

Напишите тест для 'analyseData' вместо' handleData'. – Thiefster

ответ

3

вы не будете исключения улова, не брошенные -_- просто проверить «метание метод исключения» вместо «исключение ловли» один

@Test(expected = InvalidParameterExeption.class) 
public void testIfFaultyDataPacketIsRecognised() { 
    analyseData(faultyDataPacket); 
} 
+0

У меня уже был этот тест. Но я тестировал более высокий уровень абстракции и проверял, могу ли я сделать сбои в системе, отправив все виды данных. Эти тесты были на самом деле двойной проверкой, но это не обязательно. –

+0

Что вы подразумевали под методом ** throwins exception **? –

0

В идеале вы должны поймать и повторно бросит exception.But если вы не хотите этого делать. Почему бы не получить исключение в тестовом случае, как ожидалось?

@Test 
public void testIfFaultyDataPacketIsRecognised() { 
    try { 
     handleData(faultyDataPacket); 
     Assert.fail("Fail! Method was expected to throw an exception because faulty data packet was sent.") 
    } catch (InvalidParameterException e) { 
     // expected 
    } 
} 
Смежные вопросы