In tentativi di copertura del 100% del codice, mi sono imbattuto in una situazione in cui ho bisogno di unità blocco di codice di prova che cattura uno InterruptedException
. Come fa una unità correttamente a testare questo? (JUnit 4 sintassi si prega)Come scrivere test unitario per "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, questo è vero. Punta 80-85 e eviterete tutti i problemi come questo e continuate a mantenere il vostro codice piuttosto intatto. – BjornS
Questa è una soluzione piuttosto brutale e potrebbe avere effetti collaterali inaspettati. Ad esempio, ho scoperto che chiamare Thread.currentThread(). Interrupt() in un metodo di test influirebbe su tutti i metodi di test nella stessa classe, causando il fallimento di tutti gli altri test. Ho anche scoperto che l'aggiunta di questo a qualsiasi classe di test causerebbe a Sonar di segnalare una copertura del test dell'unità dello 0% (non hanno scoperto il motivo). – RCross
Sì, dovresti stare attento a dove lo hai usato, assicurandoti che lo stato dell'interrupt sia cancellato (come è qui) e che non ci sia un controllo intermedio dello stato tra le tue impostazioni e il controllo del test su di esso. – erickson