¿Hay alguna manera de saber en una clase de prueba JUnit 4 si la clase fue iniciada por una prueba-suite? Tengo cosas globales que quiero ejecutar antes de todas las pruebas (con respecto a la base de datos en memoria), así que pensé hacerlo en el traje de prueba. Sin embargo, todavía quiero poder iniciar una prueba a la vez sin un traje de prueba, así que necesito saber si necesito inicializar las cosas globales en la parte @Before de la prueba ... ¿Alguien sabe? si es posible ?Invocación de prueba: cómo configurar la configuración común a todas las suites de prueba
Respuesta
Existen varias formas de lograr esto. Lo más fácil y simple es tener una 'prueba' que se ejecuta al principio y al final de su suite, que configura su base de datos y luego establece un indicador global. En tus pruebas @Before y @After verificas esta bandera y, si es necesario, realizas la configuración/desmontaje.
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
Esta es la solución más simple, pero no es muy agradable, por lo que una solución más limpia sería utilizar un TestRule. Mira extendiendo ExternalResource. Esto implementa antes de & después de la lógica que rodea sus métodos de prueba. Esto le permitiría factorizar sus métodos @Before y @After, para reutilizar el mismo código en todas partes.
Luego, para su suite, también debe implementar lógica de antes/después. Desafortunadamente, la clase anotada con @RunWith (Suite.class) en realidad no está instanciada, por lo que no puede usar el constructor de esa clase, pero puede ampliar Suite. Dependiendo de cómo va a funcionar esto, usted tendrá que poner en práctica uno de los constructores, utilizando @RunWith como ejemplo:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
A continuación, ejecute el conjunto de pruebas con
@RunWith(MySuite.class)
Hay varios constructores que se usan en diferentes situaciones, mira los comentarios al lado de cada uno para obtener detalles. Aún necesita usar una variable global para que sus Reglas no vuelvan a ejecutar el código de configuración. Lo anterior funcionará si solo quieres ejecutar el código de configuración, pero ejecutar el código de desmontaje es más difícil, pero se puede hacer. Avíseme si lo necesita :-)
Si quiere más flexibilidad (digamos, ejecutar el código de configuración solo para métodos específicos), entonces vea mi respuesta al How to define JUnit method rule in a suite?.
Utilizaría las anotaciones de JUnit @BeforeClass y @AfterClass para indicar los métodos para realizar este tipo de trabajo.
Desde el Javadoc @BeforeClass:
veces varias pruebas necesitan compartir configuración costoso computacionalmente (como iniciar sesión en una base de datos). Si bien esto puede comprometer la independencia de las pruebas de , a veces es una optimización necesaria. Anotar un método public void no-arg con @BeforeClass hace que se ejecute una vez antes de cualquiera de los métodos de prueba de la clase. Los métodos @BeforeClass de las superclases se ejecutarán antes que los de la clase actual .
Esto es relevante para varios métodos @Test anotados dentro de un archivo Clase de prueba, que no es el escenario que estoy tratando, lo necesito para varias CLASES de prueba. – stdcall
Puede colocar un código @BeforeClass
en cada conjunto de pruebas, que delega en una clase auxiliar que realiza la configuración común. La clase auxiliar podría tener un static boolean
que registre si la configuración ya se ha realizado. Si ya se ha hecho, la clase auxiliar no haría nada.
- 1. reutilización de suites de prueba con múltiples implementaciones?
- 2. invocación a prueba las clases de otro proyecto Maven
- 3. Fitnesse: Cómo ejecutar pruebas específicas en varias suites de prueba
- 4. ¿Cómo crear suites de prueba anidadas para Selenium IDE?
- 5. configuración de prueba de la unidad Qt
- 6. Prueba todas las combinaciones en Python
- 7. Cómo configurar la compilación y la prueba de configuración múltiple de jenkins
- 8. Rspec: Configuración de las galletas en una prueba de ayudante
- 9. ¿Cómo configurar las dependencias de Maven entre las carpetas de prueba en dos proyectos?
- 10. ReSharper y poner a prueba las categorías
- 11. ¿Cómo configurar log4j en un entorno de prueba unitario?
- 12. Prueba de unidad/integración Configuración de asterisco
- 13. prueba de unidad de configuración Spring Java
- 14. ¿Cómo hacer una prueba a prueba de su aplicación wpf?
- 15. Barra de navegación común a todas las actividades
- 16. Prueba de la herencia de prueba
- 17. Prueba de Resorte con configuración H2 db
- 18. autorize.net disminuye la prueba en el modo de prueba
- 19. Repita la prueba de prueba mstest varias veces
- 20. ¿Cómo configurar una prueba de entorno de Active Directory?
- 21. ¿Cómo ejecuto la configuración y el código de desmontaje con cada prueba en MSpec?
- 22. Dónde colocar los archivos de prueba para la prueba unitaria
- 23. ¿Cómo configurar Maven para sobrescribir un archivo de configuración para otro cuando se ejecuta una prueba?
- 24. ¿Cómo hace google prueba secuencia de prueba
- 25. Configuración de prueba de unidad en Qt Creator
- 26. Configuración de Git a buscar todas las ramas remotas
- 27. Junit4 Test Suites
- 28. ¿Tiene Django herramientas de prueba de BDD comparables a las herramientas de prueba de Rails?
- 29. ¿Es posible generar programas y suites de prueba JUnit mediante programación?
- 30. Maven: cómo manejar las fuentes generadas para la prueba (solo)?
La mayoría de los enlaces están muertos. – Nadar