Tengo un programa que opera extrae elementos de trabajo de una cola de bloqueo y los trabaja simultáneamente. Me doy cuenta de que esta es una descripción MUY flexible, pero ¿alguien puede sugerir una estrategia/ideas de prueba de unidad sobre qué probar?Java: estrategias de prueba de unidades de colas de simultaneidad/bloqueo
Respuesta
Utilice los mecanismos de cola de trabajo en java.util.concurrent y confíe en ellos para probar su código. Luego solo prueba a tu trabajador para asegurarte de que haga lo correcto. Si es independiente de otros hilos, eso debería ser suficiente. De lo contrario, es probable que tenga que idear una estrategia de prueba de integración en configuraciones de hardware/os/jvm que coincidan con su entorno de producción.
Tiene que diseñarlo para probarlo.
sugerencias específicas: Así
- asegurarse de que usted puede colocar las clases de prueba o se burla en la cola
- Código burla algunos principios que llevan más tiempo y estar seguros de que no son los primeros completados (demuestra concurrencia)
- Asegúrate de que tu colección de resultados tenga el mismo tamaño que todas tus pruebas.
- Asegúrese de que los resultados no estén completos hasta el tiempo asignado para la prueba más larga.
hmm, todo se debe a la posibilidad de inyectar clases de prueba/simulacro en la cola.
Gracias, estas son buenas ideas. –
Este tipo de depende del tipo de procesamiento de sus clases, de los elementos que se quitan. Por ejemplo, supongamos que escriben los artículos en una base de datos. Es posible que desee pruebas como estas.
- Un solo hilo puede extraer un elemento de la cola y guardarlo en la base de datos.
- Dos subprocesos pueden extraer elementos de la cola al mismo tiempo, y los datos se guardan si el primer subproceso intenta guardar primero.
- Dos subprocesos pueden extraer elementos de la cola al mismo tiempo, y los datos se guardan si el segundo subproceso intenta guardar primero.
- Cincuenta subprocesos (o el límite que sea apropiado para su programa) pueden extraer elementos de la cola al mismo tiempo y guardar los datos correctamente.
Si está utilizando una de las implementaciones de cola de bloqueo de JDK o una implementación de un tercero, asegúrese de no probar el comportamiento de la clase de cola de bloqueo. Por supuesto, si has escrito el tuyo, entonces tienes muchas más pruebas que debes escribir.
Espero que esto ayude.
Gracias, estos son geniales. –
- 1. Estrategias de prueba EJB?
- 2. Prueba de unidades multiproceso
- 3. Estrategias ficticias de prueba de datos y unidades en una pila de aplicaciones modulares
- 4. servlets de prueba de unidades
- 5. C# - WPF: estrategias de prueba
- 6. C# Recursos de prueba de unidades
- 7. Prueba de unidades de un componente Swing
- 8. Marco de prueba de unidades de WPF
- 9. Marco de prueba de unidades .NET favorito
- 10. Doctrina de prueba de unidades ODM
- 11. Estrategias de prueba basadas en modelos
- 12. Colas de prioridad en Java
- 13. Prueba de consola y rastrillo Rails: unidades
- 14. Unidades de cocina en Java
- 15. Modelo de prueba de unidades Clases que heredan de NSManagedObject
- 16. E/S de archivos de prueba de unidades
- 17. Código de ejemplo de prueba de unidades automáticamente
- 18. Marco de aislamiento de prueba de unidades preferidas para .net
- 19. Uso de marcos de prueba de unidades existentes con SystemC
- 20. Análisis en C++ para generar resúmenes de prueba de unidades
- 21. Prueba de unidades de construcción para Controladores asíncronos MVC2
- 22. ¿Existe un marco de prueba de unidades Java que autoevalúe getters y setters?
- 23. Colas de espera y colas en C#
- 24. Trialware/estrategias de licencia
- 25. Estrategias de análisis de rendimiento
- 26. estrategias de aplicación hashCode
- 27. ¿Visual Studio 2010 solo ejecutará 4.0 unidades de prueba?
- 28. ¿Proyectos de prueba unitarios o múltiples unidades por solución?
- 29. Prueba de unidades PHP con Zend Auth y Zend ACL
- 30. Creación dinámica de colas de mensajes asíncronos en Java
¿Qué intentan probar, la validez de BlockingQueue o el procesamiento simultáneo en el valor devuelto? –
He probado la validez del trabajo real en el que trabaja el gestor de colas de bloqueo, pero quiero probar el código que lo rodea. –
Las pruebas de concurrencia son complicadas: puede tener un programa mal multihilo que superará todas las pruebas de manera impecable en algunas plataformas (por ejemplo, una CPU de un solo núcleo), pero fallará en otras. Incluso si sus pruebas tienen éxito en una CPU multinúcleo, la programación de la secuencia varía para los diferentes sistemas operativos y podrían fallar en cualquier otro lugar. – toto2