2011-09-01 30 views
30

En este post, hice una pequeña pregunta como parte de un problema mayor. Como aún no recibí respuestas, puse mi pregunta aquí:¿JUnit ejecuta casos de prueba secuencialmente?

¿Es razonable suponer que JUnit ejecuta casos de prueba secuencialmente: un caso de prueba finaliza antes de que comience el siguiente. ¿Difiere entre las versiones de JUnit (mi prioridad es JUnit4)? Y si no, ¿hay una manera simple de forzar a JUnit a ejecutar las pruebas secuencialmente?

Gracias

+0

Como nota lateral, aquí es algo más acerca de la ejecución de pruebas en el uso paralelo JUnit 4.7: http: // stackoverflow.com/questions/423627/running-junit-tests-in-parallel – mort

+0

Si usa JUnit dentro de su compilación Maven, y su construcción está configurada para ser multiproceso utilizando el parámetro -T, (por ejemplo, -T 4C), entonces el las pruebas se ejecutarán en paralelo donde sea posible –

Respuesta

23

Sí, por defecto creo que ejecuta pruebas de forma secuencial.

JUnit 4.6 introdujo un experimental ParallelRunner para ejecutar pruebas en paralelo - No sé de su estado actual. Sin embargo, esperaría que el paralelismo siga siendo una característica de "aceptación" por defecto. (A juzgar por otras respuestas, parece que ahora está aquí para quedarse, pero en una forma ligeramente diferente, y aún así participar.)

+0

@FDinoff: Sí, parece que las notas de la versión 4.6 son difíciles de encontrar ahora. He eliminado el enlace. –

+0

¿Es generalmente mejor ejecutar pruebas en paralelo en lugar de secuencialmente? ¿Qué tipo de hardware debemos tener para ejecutar pruebas en paralelo? – testerjoe2

+0

¿Suena esto como una forma aceptable de confirmación de secuencia que no sea la depuración? Crea una clase de prueba con 10 métodos de prueba. Crea una lista de enteros en la clase de prueba. Cada método de prueba ingresa su posición en clase en la Lista. Ejecute todas las pruebas 10 veces. Cada vez, los enteros siempre deben estar en el orden correcto. – testerjoe2

4

Una conjetura fuerte y razonable: sí, JUnit tiene un solo hilo por defecto.

De lo contrario, uno no sabría si una prueba falló porque el código está roto o falló debido a problemas de concurrencia si algunas pruebas se ejecutaron en paralelo.

+0

Si cada prueba usa sus propios datos de prueba (no siempre es posible), entonces ¿es mejor realizar las pruebas en paralelo? – testerjoe2

15

La ejecución en paralelo de pruebas es compatible desde JUnit 4.7. Pero hasta donde yo sé, nunca se realiza de forma automática, específicamente debe configurarlo, p. como aquí: http://java.dzone.com/articles/running-junit-tests-parallel

Pero no se olvide que:

pruebas Buenas automatizados deben ser independientes, aisladas y reproducible, lo que los candidatos ideales para ser ejecutar simultáneamente.

No sé por qué lo pide, pero si no se cumplen los criterios anteriores, es posible que desee pensar en el diseño de la prueba.

+0

"Las buenas pruebas automatizadas deben ser independientes, aisladas y reproducibles". ¿Podemos lograr esto teniendo datos de prueba separados para cada prueba, siempre que el proceso de creación de datos de prueba no consuma demasiado tiempo ni recursos? – testerjoe2

3

Sí,

Y también pensar en el @before y @after no es posible que tenga código que restaura el estado para la próxima prueba a ejecutar.

+0

¿me puede explicar un poco más? – testerjoe2

1

Sí. Como se mencionó en alguna parte de los comentarios, debe planificar cuidadosamente la configuración y el desmontaje de la plataforma de prueba (todas las superclases afectan esas acciones), así como la configuración y el desmontaje de la estación de pruebas.

Además, en una nota secundaria, por lo que puedo recordar, JUnit no garantiza el orden de ejecución de las pruebas (es decir, a menos que estén en una suite, supongo). Esto es importante y debe empujarlo a realizar una limpieza muy precisa y restaurar el estado de SUT entre las pruebas, y evitar los casos de prueba que se basan en los resultados de otras pruebas. usted podría decir que esto es una especie de antipatrón :).

-1

Con mi experiencia, puedo decir que podemos serializar las pruebas en una clase nombrando el nombre del método que tiene Test en él. ex:

@Test 

public ..... firstTest() 
{ 

} 

@Test 

public .... thirdTest() 
{ 

} 

@Test 

public....secondTest() 
{ 

} 

la orden es firstTest, thirdTest, secondTest

Cuestiones relacionadas