Bei Versuchen von 100% Code-Coverage, stieß ich auf eine Situation, in der ich Block Code testen muss, die eine InterruptedException
fängt. Wie testet man das richtig? (JUnit 4 Syntax bitte)Wie Unit-Test schreiben für "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, das ist wahr. Ziel für 80-85 und Sie werden alle Probleme wie diese vermeiden und Ihren Code immer noch unberührt lassen. – BjornS
Dies ist eine ziemlich brutale Lösung und könnte unerwartete Nebenwirkungen haben. Ich fand zum Beispiel, dass das Aufrufen von Thread.currentThread() .interrupt() in einer Testmethode alle Testmethoden in der gleichen Klasse betrifft, was dazu führt, dass alle anderen Tests fehlschlagen. Ich fand auch, dass das Hinzufügen dieses zu jeder Testklasse Sonar veranlassen würde, 0% Unit Test Coverage zu melden (habe nicht herausgefunden, warum). – RCross
Ja, Sie müssen vorsichtig sein, wo Sie es benutzt haben, stellen Sie sicher, dass der Interrupt-Status gelöscht wird (wie hier) und dass es keine Zwischenprüfung des Status zwischen Ihrer Einstellung und der Überprüfung Ihres Tests gibt. – erickson