2012-01-10 8 views
5

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

+1

¿Qué intentan probar, la validez de BlockingQueue o el procesamiento simultáneo en el valor devuelto? –

+0

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. –

+0

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

Respuesta

2

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.

2

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.

+0

Gracias, estas son buenas ideas. –

2

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.

+0

Gracias, estos son geniales. –

Cuestiones relacionadas