Tenemos la respuesta a este atasco, al menos eso deseamos. Si sigues con dudas coméntalo, que sin tardar
Solución:
Creo que los documentos proporcionan un resumen útil:
Si prefiere que JUnit Jupiter ejecute todos los métodos de prueba en la misma instancia de prueba, simplemente anote su clase de prueba con @TestInstance(Lifecycle.PER_CLASS). Al usar este modo, se creará una nueva instancia de prueba una vez por clase de prueba. Por lo tanto, si sus métodos de prueba se basan en el estado almacenado en variables de instancia, es posible que deba restablecer ese estado en los métodos @BeforeEach o @AfterEach.
El modo “por clase” tiene algunos beneficios adicionales sobre el modo predeterminado “por método”. Específicamente, con el modo “por clase” es posible declarar @BeforeAll y @AfterAll en no-static así como en los métodos predeterminados de la interfaz. Por lo tanto, el modo “por clase” también permite utilizar los métodos @BeforeAll y @AfterAll en las clases de prueba @Nested.
Pero probablemente ya hayas leído eso y tengas razón al pensar que hacer un campo static tendrá el mismo efecto que declarar el campo como una variable de instancia y usar @TestInstance(Lifecycle.PER_CLASS)
.
Entonces, quizás la respuesta a la pregunta “cómo podría ser útil en JUnit 5” es que usar un @TestInstance
…
- Sea explícito acerca de sus intenciones. Podría suponerse que el uso de la static palabra clave fue accidental mientras que el uso de
@TestInstance
es menos probable que sea accidental o el resultado de copiar y pegar sin pensar. - Delega la responsabilidad de administrar el alcance y el ciclo de vida y limpiar el marco en lugar de tener que recordar administrarlo usted mismo.
Esta anotación se introdujo para reducir la cantidad de objetos creados al ejecutar las pruebas unitarias.
agregando @TestInstance(TestInstance.Lifecycle.PER_CLASS)
a su clase de prueba evitará que se cree una nueva instancia de su clase para cada prueba en la clase. Esto es particularmente útil cuando tiene muchas pruebas en la misma clase de prueba y la creación de instancias de esta clase es costosa.
Esta anotación debe usarse con precaución. Todas las pruebas unitarias deben ser aisladas e independientes entre sí. Si una de las pruebas cambia el estado de la clase de prueba, entonces no debe usar esta función.
Haciendo tus campos static lograr el mismo efecto no es una buena idea. De hecho, reducirá la cantidad de objetos creados, pero no se pueden limpiar cuando se ejecutan todas las pruebas en la clase de prueba. Esto puede causar problemas cuando tiene un conjunto de pruebas gigante.
@TestInstance
se utiliza para configurar el ciclo de vida de las instancias de prueba para la clase de prueba anotada o la interfaz de prueba:
PER_CLASS
: Se creará una nueva instancia de prueba una vez por clase de prueba.PER_METHOD
: Se creará una nueva instancia de prueba para cada método de prueba, método de fábrica de prueba o método de plantilla de prueba. Este modo es análogo al comportamiento encontrado en las versiones 1 a 4 de JUnit.
Si @TestInstance
no se declara explícitamente en una clase de prueba o en una interfaz de prueba implementada por una clase de prueba, el modo de ciclo de vida se establecerá implícitamente de forma predeterminada en PER_METHOD
.
Establecer el modo de ciclo de vida de la instancia de prueba en PER_CLASS
habilita las siguientes características:
- Estado de instancia de prueba compartido entre métodos de prueba en una clase de prueba dada, así como entre métodos nostatic
@BeforeAll
y@AfterAll
métodos en la clase de prueba. - Declaración de
@BeforeAll
y@AfterAll
métodos en@Nested
clases de prueba - Declaración de
@BeforeAll
y@AfterAll
en los métodos predeterminados de la interfaz. - Declaración simplificada de
@BeforeAll
y@AfterAll
métodos en clases de prueba implementados con el lenguaje de programación Kotlin.
Consulte la documentación del ciclo de vida de la instancia de prueba para obtener más detalles.
Reseñas y valoraciones de la guía
Si haces scroll puedes encontrar las crónicas de otros sys admins, tú además tienes la libertad de mostrar el tuyo si te apetece.