В попытках покрытия 100% кода я столкнулся с ситуацией, когда мне нужно блок тестового блока кода, который ловит InterruptedException
. Как правильно это проверить? (JUnit 4 синтаксис пожалуйста)Как написать модульный тест для «InterruptedException»
private final LinkedBlockingQueue<ExampleMessage> m_Queue;
public void addMessage(ExampleMessage hm) {
if(hm!=null){
try {
m_Queue.put(hm);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
+1, это правда. Стремитесь к 80-85, и вы обойдете все проблемы, подобные этому, и сохраните свой код довольно нетронутым. – BjornS
Это довольно жестокое решение и может иметь неожиданные побочные эффекты. Например, я обнаружил, что вызов Thread.currentThread(). Interrupt() в одном методе тестирования повлияет на все методы тестирования в том же классе, в результате чего все остальные тесты будут терпеть неудачу. Я также обнаружил, что добавление этого в любой тестовый класс приведет к тому, что Sonar сообщит о покрытии 0% единиц тестирования (не обнаружили, почему). – RCross
Да, вам нужно быть осторожным, когда вы его использовали, убедившись, что статус прерывания будет очищен (как он есть здесь) и что нет промежуточной проверки состояния между вашим параметром и проверкой его теста. – erickson