¿Cómo espero a que salga Scala Actor()? Configuré dos actores en una prueba unitaria y envío algunos mensajes para que comiencen. Envían algunos mensajes hacia adelante y hacia atrás y, finalmente, ambos llaman a exit(). ¿Cómo hago para que mi prueba unitaria espere que ambos actores terminen antes de aprobar?Esperar a que salga un actor()
Respuesta
Si conoce de antemano la cantidad de mensajes intercambiados entre los actores, puede usar un java.util.concurrent.CountDownLatch
para realizar un seguimiento del recuento de mensajes. En los actores, después de cada proceso del mensaje, haga
latch.countDown()
y en su hilo principal hacer
latch.await()
Esto hará que su espera hilo principal hasta que el recuento del pestillo se ha reducido a cero.
Si no conoce el conteo de los mensajes por adelantado, pero tiene una condición que indica el final, entonces puede usar java.util.concurrent.locks.Condition
. En los actores, cuando su condición se cumple, hacer
if (conditionSatisfied)
condition.signal()
y en su hilo principal hacer
while (!conditionSatisfied)
condition.await()
para hacerla esperar hasta que la condición se cumple. Para obtener más información, consulte los javadocs de CountDownLatch
y Condition
.
Véase this Gist por ejemplo de usar Condition
.
En Especificaciones puede usar Eventually Matchers. Si conoce el estado final de su actor o cualquier entidad (por ejemplo, la persistencia de la tienda) se modifica, es posible forzar prueba que esperar hasta que se produzca el cambio a este estado:
<entity state> must eventually(10, 1.second)(be(<state>)) // there will be 10 retires every second, and if the state will be different, exception is thrown
Eso haría que la prueba de la unidad tardara aproximadamente una décima de segundo en ejecutarse, lo cual es demasiado lento. –
- 1. Impedir que Excel salga de
- 2. Cómo esperar a que un ThreadPoolExecutor termine
- 3. ¿Cómo esperar a que termine un animador?
- 4. Ejecutar enlaces de acceso directo desde un archivo por lotes y no esperar a que la aplicación salga
- 5. Akka Actor - espera algún tiempo para esperar un mensaje, de lo contrario envía un mensaje
- 6. ¿Debo esperar a que Django comience a soportar Python 3?
- 7. Esperar a que finalicen los comandos
- 8. ¿Cómo esperar a que se copie por completo un archivo?
- 9. Cómo esperar a que un proceso finalice C++
- 10. Esperar a que un determinado proceso (conociendo el "PID") final
- 11. cómo esperar mejor a que se libere un filelock
- 12. ¿Cómo esperar a que un BackgroundWorker se cancele?
- 13. ¿Cómo se espera que termine el sistema Akka actor?
- 14. ¿Cómo hago que GDB salga de un bucle?
- 15. ¿Cómo se evita que un archivo Windows Batch salga temprano?
- 16. a scala remote actor excepción
- 17. ¿Cómo puedo hacer que salga un programa de consola C++?
- 18. esperar hasta que un proceso termina
- 19. Python: inicia un nuevo símbolo del sistema en Windows y espera a que termine/salga
- 20. ¿Cómo uso correctamente el método WaitForSingleObject para esperar a que termine un programa externo?
- 21. Enviar un PoisonPill a un actor en Java
- 22. ¿Cómo puedo activar adecuadamente a un actor temporal en Akka?
- 23. a petición actor obtener o bien crear
- 24. simple Scala pregunta el actor
- 25. Ejecute un proceso y salga sin esperarlo
- 26. Cómo esperar a que se presione una tecla en Clojure
- 27. Esperar a que los hilos escriban cambios en el anzuelo
- 28. io.popen - ¿cómo esperar a que termine el proceso en Lua?
- 29. webdriver esperar a que aparezca uno de los elementos múltiples
- 30. ¿Cómo esperar a que el proceso termine de usar IO.popen?
pude cuenta atrás() justo antes exit() y solo cuenta a 1. Eso parece redundante, ya que los dos métodos siempre se llamarán juntos. –
No lo entiendo Quieres que el hilo principal espere hasta que los actores hayan terminado, ¿verdad? Eso es lo que harán las llamadas 'await()'. –
Significa que tengo que agregar un pestillo o condición al código de producción (los actores) puramente para una prueba de JUnit (esperando por los Actores). –