La pregunta más completa es, dada una dependencia que espera una devolución de llamada como parámetro, ¿cómo puedo escribir una prueba de unidad que cubra la lógica de devolución de llamada y que aún logran simular la dependencia?Cómo probar la unidad de lógica de devolución de llamada?
public class DoStuff {
public void runThis(Runnable callback) {
// call callback
}
}
public class ClassUnderTest {
private DoStuff stuffToDo;
public void methodUnderTest() {
this.stuffToDo.runThis(/*a runnable with some logic*/)
}
}
En el ejemplo anterior, me gustaría burlarse stuffToDo
ya que debería verificar las llamadas y los resultados simulados de llamadas a métodos. Sin embargo, burlarse de runThis
hace que la lógica de devolución de llamada no se pruebe. Además, la lógica de devolución de llamada parece que debería ser privada, por lo que no esperaría probarla directamente; quizás eso es una idea errónea de mi parte.
Dado que las devoluciones de llamada se utilizan bastante extensivamente, esperaría que hubiera un método común para probarlas pero no las he encontrado.
¿Es necesario probar la devolución de llamada solo en este contexto? Si es así, ¿por qué no simplemente escribir pruebas para las distintas devoluciones de llamada que planea pasar, que expresan su expectativa de los resultados? ¿Me estoy perdiendo de algo? – Jonah
Ha intentado usar CountDownLatch como en este ejemplo: http://stackoverflow.com/a/3802487/2301224 – Baker