Tengo un conjunto de pruebas que necesitan una base de datos para ejecutarse. Quiero crear la base de datos al comienzo de su ejecución y eliminarla al final.
De maven También agregué RunListener al plugin maven-surefire y funciona bien. Y también he agregado una variable de propiedad del sistema llamada ismaven. Cuando ejecuto la prueba desde maven, esta variable se inicializa, pero cuando ejecuto las pruebas desde Eclipse, esta variable es nula (accedo a la variable con System.getProperty).
<configuration>
<properties>
<property>
<name>listener</name>
<value>com.mycompany.MyRunListener</value>
</property>
</properties>
<systemPropertyVariables>
<ismaven>true</ismaven>
</systemPropertyVariables>
</configuration>
Todos mis pruebas de bases de datos heredan de una clase que tiene un @BeforeClass y un @AfterClass métodos. Estos métodos comprueban si Maven ejecuta la prueba o si Eclipse verifica el valor de la propiedad ismaven. Si maven ejecuta la prueba, la propiedad ismaven tiene un valor y hacen cualquier cosa. Pero es la prueba está siendo ejecutada por el Eclipse, la variable ismaven es nula y que comienza (@BeforeClass) o se detiene (@AfterClass) la base de datos:
@BeforeClass
public static void checkIfStartDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, start the database
if (ismaven == null) {
startDatabase();
}
}
@AfterClass
public static void checkIfStopDatabase() {
String ismaven = System.getProperty("ismaven");
// If it is not maven, stop the database
if (ismaven == null) {
stopDatabase();
}
}
Esta solución no resuelve el 100% de su problema pero si lo implementa puede ejecutar (y depurar) todas las pruebas de una clase JUnit usando Eclipse y también puede ejecutar todas las pruebas de su proyecto usando Maven con la garantía de que ejecutará una vez un código antes o después de la ejecución de todas tus pruebas.
Esto no es exactamente lo que busqué, porque no me gusta aumentar la complejidad de la implementación de prueba para el registro. Quería agregar el registro fuera de las pruebas, pero la solución es la mejor hasta el momento y el resultado al final es el deseado. Marqué esta respuesta como la solución. –