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.