Debo usar las mismas variables a través de toda la Unidad de Prueba?

0

Pregunta

Soy la creación de Pruebas unitarias en Java y para cada método, puedo crear las mismas listas, variables, etc. Por otro lado, por supuesto, pensé que podría crear todas estas variables como globales y establecer sus valores en la setup() método (en @Before), pero no estoy seguro de si los valores pueden ser cambiados cuando se ejecuta pruebas, debido a los múltiples hilos, etc. Así que, ¿cuál es la mejor manera para que esta situación?

java junit junit5 testing
2021-11-23 13:33:22
1

Mejor respuesta

2

Nada de que preocuparse. JUnit creará una nueva instancia de la clase de prueba y, a continuación, ejecute cada @Before método, y sólo a continuación, ejecute el @Test el método, y que hace que la canción y la danza de rutina a todos otra vez por cada @Test anotado método en la clase. Estás usando @Before exactamente como se había previsto: Es para almacenar el código de inicialización que se requiere para todas las pruebas en que clase de prueba.

JUnit lo hace de esta manera porque a la prueba de independencia " es bueno tener: Pruebas, preferentemente, fallar o pasar independiente del orden en que se ejecuta.

Cada tan a menudo el proceso init es tan caro, que no vale la pena pagar el "costo" de correr una y otra vez para cada prueba. La anotación @BeforeClass existe específicamente para ese propósito. El javadoc de @BeforeClass incluso explica que esto afecta a la prueba de la independencia y por lo tanto debe ser utilizado solamente si el programa de instalación de trabajo que hacer dentro de un método de este tipo es lo suficientemente caro (de cómputo o de otra manera) a hacer esa compensación.

En otras palabras:

Sus preocupaciones acerca de la prueba de independencia son reales, pero se aplican a @BeforeClass. @Before no sufren de este problema; que el código se vuelve a ejecutar para cada prueba.

NOTA: Usted puede tirar todo esto por la ventana si usted tiene static cosas. No tiene estática de la materia en el código de la prueba a menos que realmente sepas lo que estás haciendo. Yo asumo que usted no tiene que en el que caso de continuar, sus pruebas son independientes.

2021-11-23 13:38:26

Muchas gracias, cualquier código de ejemplo que muestran el uso correcto?
rzwitserloot

No entiendo la diferencia entre @BeforeClass y @Before. Cualquier aclaración pls?
Amadán

todos los métodos con @Before se ejecuta antes de cada prueba. Todos los métodos con @BeforeClass se ejecuta sólo una vez, antes de cualquier prueba. En general, se establece static cosas con @BeforeClass que se vuelve a usar (por lo tanto, las pruebas no son independientes). Se establece la no-estático cosas con @Beforey por lo tanto las pruebas son independientes. Acabo de leer la documentación de estas anotaciones.
rzwitserloot

@BeforeClass (JUnit 5: @BeforeAll) se ejecuta una vez para toda clase de prueba, @Before (JUnit 5: @BeforeEach) se ejecuta antes de cada método de prueba.
rzwitserloot

Yo uso JUnit5, entonces veo la diferencia entre @BeforeEach vs @BeforeAll además de sus explicaciones. Sin embargo, no estoy seguro de si debo o no limpiar las listas que son utilizados por varias pruebas. I ay necesidad de claro en @AfterEach. Alguna idea?
avandeursen

No borrar la lista. También suena como debe de juguete con esto un poco, porque, evidentemente, una respuesta no es suficiente para usted. Eso es un buen instinto! Simplemente.. hacer algunas pruebas, agregar algunos elementos a una lista inicializa sólo de vez en @Beforee imprimir algunas cosas - sin quitar nada. Luego, simplemente observar lo que sucede.

Sí, podría ser tocado, pero creo que es un muy común de la situación y debe haber un enfoque general para que. Así, sólo tengo que aclarar acerca de la Prueba de la Unidad convención para la re-utilizando las mismas variables (por ejemplo, de la definición de vez en @BeforeEach O @BeforeAll, claro las variables en @AfterEach. Así que, ¿cuál es el enfoque adecuado para esta situación?. Alguna idea?

Uso @Before. No tengo idea de lo que podría posiblemente ser confuso en este punto. La respuesta se explica en detalle!

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................