Pregunta ¿JUnit ejecuta casos de prueba secuencialmente?


En esto enviar, Hice una pequeña pregunta como parte de un problema mayor. Como aún no recibí las respuestas, hago mi pregunta aquí:

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

Gracias


32
2017-09-01 08:29


origen


Respuestas:


Sí, de manera predeterminada, creo que ejecuta pruebas secuencialmente.

JUnit 4.6 introdujo un experimento 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í optar por ella).


24
2017-09-01 08:32



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 olvides eso:

Las buenas pruebas automatizadas deben ser independientes, aisladas y reproducibles, lo que los convierte en candidatos ideales para que se ejecuten al mismo tiempo.

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


15
2017-09-01 08:35



Una suposición fuerte y razonable: sí, JUnit tiene un único subproceso 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.


4
2017-09-01 08:33



Sí,

Y también piensa en el @before y @after allí puede tener un código que restablezca el estado para que se ejecute la próxima prueba.


3
2017-09-01 08:49



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 los testcases (es decir, a menos que estén en un conjunto, 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
2017-09-07 07:56



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

@Test

public ..... firstTest ()
{

}

@Test

public .... thirdTest()
{

}

@Test

public....secondTest()
{

}

El orden es firstTest, thirdTest, secondTest


-2
2018-03-08 14:58