Saltar al contenido

¿Cómo evitar Thread.sleep en las pruebas unitarias?

Solución:

Si estas probando [Unit Test] por el método methodToBeTested, simplemente deberías burlarte routingservice.
No debería probar ningún método que methodToBeTested llamadas.

Sin embargo, parece que desea probar el RoutingService (dijiste “El problema es que RoutingService cambia el estado de objectToRoute y esto es exactamente lo que quiero comprobar “).

Probar RoutingService métodos, debe escribir pruebas unitarias separadas para esos métodos.

Sugiero esperar para sincronizar pruebas asincrónicas. Por ejemplo, suponga que tiene un objeto de resultado que se establece después de algunas operaciones de subproceso y desea probarlo. Escribe una declaración como esta:

 await()
.atMost(100, TimeUnit.SECONDS)
.untilAsserted(() -> assertNotNull(resultObject.getResult()));

Espera máximo 100 segundos, o hasta que se satisfaga la afirmación. Por ejemplo, si getResult () devuelve algo que no es nulo entre 0-100 segundos, la ejecución continúa a diferencia de Thread.sleep, que retiene la ejecución durante un tiempo determinado, independientemente de que el resultado esté allí o no.

Podrías burlarte objectToRoute para establecer el valor de un CompletableFuture y luego llamar get sobre eso en su afirmación. Esto esperará hasta que se establezca el valor antes de continuar. Luego, establezca un tiempo de espera @Test(timeout=5000) en caso de que el valor nunca se establezca.

Esto tiene la ventaja de que la prueba no esperará más de lo necesario y es más difícil fallar debido a un tiempo demasiado corto porque puede hacer que el tiempo de espera sea mucho mayor de lo normal.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *