In attempts of 100% code coverage, I came across a situation where I need to unit test block of code that catches an InterruptedException
. How does one correctly unit test this? (JUnit 4 syntax please)
JavaScript
x
private final LinkedBlockingQueue<ExampleMessage> m_Queue;
public void addMessage(ExampleMessage hm) {
if( hm!=null){
try {
m_Queue.put(hm);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Advertisement
Answer
Right before invoking addMessage()
, call Thread.currentThread().interrupt()
. This will set the “interrupt” status flag on the thread.
If the interrupted status is set when the call to put()
is made on a LinkedBlockingQueue
, an InterruptedException
will be raised, even if no waiting is required for the put
(the lock is un-contended).
By the way, some efforts to reach 100% coverage are counter-productive and can actually degrade the quality of code.