2010-02-22 24 views
6

Tengo un conjunto de pruebas JUnit 4 con métodos BeforeClass y AfterClass que realizan una configuración/desmontaje para las siguientes clases de prueba. Lo que necesito es ejecutar las clases de prueba también por ellos mismos, pero para eso necesito un escenario de configuración/desmontaje (BeforeClass y AfterClass o algo así) para cada clase de prueba. El problema es que cuando ejecuto el paquete no quiero ejecutar la configuración/desmontaje antes y después de cada clase de prueba, solo quiero ejecutar la configuración/desmontaje del banco de pruebas (una vez). ¿Es posible? Gracias por adelantado.Conjunto de pruebas Junit 4 y clases de prueba individuales

Respuesta

4

No conozco ninguna forma estándar de hacer esto con JUnit. La razón para ello, como probablemente ya sepa, es que sus casos de prueba deben ejecutarse independientemente el uno del otro. Esto se refiere a los métodos de instalación/desmontaje "normales" que se ejecutan antes y después de cada método de prueba. Sin embargo, la configuración y desmontaje de la clase es un poco diferente, aunque preferiría ejecutar mis pruebas de forma independiente y permanecer fuera de la zona problemática.

Sin embargo, si realmente está convencido de lo que está haciendo, podría usar un indicador global para indicar si se debe ejecutar o no la configuración de la clase y verificar su estado en los métodos de configuración/desmontaje de la clase . En su conjunto de pruebas, podría incluir una clase especial como la primera, que no hace más que ejecutar la configuración y establecer el indicador global para indicar a los casos de prueba reales que sus métodos de instalación/desmontaje de clase no se deben ejecutar. Del mismo modo, una última clase especial en el conjunto puede ejecutar el código de desmontaje. La advertencia es que me temo que JUnit no garantiza el orden de ejecución de las clases de prueba dentro de un conjunto, aunque lo más probable es que las ejecute en el orden especificado, pero esto es solo un detalle de implementación. Pruébelo, puede funcionar para usted, pero no hay garantía de que siempre hará lo que espera.

+2

Gracias por la respuesta, de hecho me había ocurrido, pero pensé que tal vez había una solución mejor. La razón de Lo que quiero hacer es porque la configuración limpia el entorno y restablece la base de datos, por lo que toma algo de tiempo y es por eso que no quiero ejecutar la configuración para cada clase de prueba, pero necesito hacerlo cuando ejecuto un prueba individual. – Hypnus

3

Si tiene jUnit 4.7+, le recomiendo examinar la nueva característica llamada Rules (que se explica en this blog post). Puede que no sean exactamente lo que quieres, pero probablemente sean lo mejor que obtienes con jUnit.

Supuestamente, TestNG tiene mejores posibilidades de prueba de agrupación, pero realmente aún no lo he investigado.

0

No, no hay una forma estándar de hacer esto en JUnit, aunque podría piratear algo como sugirió Péter Török.

Sin embargo, tenga en cuenta que usted está abusando más o menos de JUnit al hacer esto. El punto entero de la unidad lo prueba que son independientes uno del otro. Esto se debe a que las dependencias entre las pruebas crean una pesadilla de mantenimiento total (las pruebas fallan porque la ejecución está en el orden incorrecto).

Así que te aconsejo que considerar seriamente si no es mejor simplemente siempre ejecutar la instalación ...

+0

Gracias, id lo consideró pero la configuración tiene una duración mucho más larga que la prueba de agujeros con todas las clases de prueba :) – Hypnus

+0

Siento tu dolor :-(. Si en realidad tuviera que hacer esto también, para las pruebas con configuración complicada (aunque fue solo por clase). Es probable que algún tipo de bandera "Ya estoy inicializado" sea tu mejor opción. – sleske

Cuestiones relacionadas