En intentos de cobertura de código 100%, me encontré con una situación en la que necesito un bloque de código de prueba de unidad que captura un InterruptedException
. ¿Cómo puede una unidad probar esto correctamente? (JUnit 4 sintaxis favor)Cómo escribir la prueba de unidad para "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, esto es cierto. Intenta 80-85 y evitarás todos los problemas como este y aún así mantendrás tu código bastante prístino. – BjornS
Esta es una solución bastante brutal y podría tener efectos secundarios inesperados. Por ejemplo, encontré que llamar a Thread.currentThread(). Interrupt() en un método de prueba afectaría todos los métodos de prueba en la misma clase, haciendo que todas las demás pruebas fallen. También encontré que al agregar esto a cualquier clase de prueba, Sonar informaría un 0% de cobertura de prueba unitaria (no se ha descubierto por qué). – RCross
Sí, tendrías que tener cuidado donde lo usaste, asegurándote de que el estado de interrupción se borrará (como está aquí) y de que no hay una verificación intermedia del estado entre tu configuración y la comprobación de la prueba. – erickson