test - JUnit+Maven+Eclipse: ¿Por qué @BeforeClass no funciona?
junit 5 download (3)
Sergio, tenías razón al extender TestCase causando el problema. Si extiende TestCase, JUnit trata su clase de prueba como una antigua (antes de la clase JUnit 4) y elige org.junit.internal.runners.JUnit38ClassRunner
para ejecutarla. JUnit38ClassRunner no sabe acerca de la anotación @BeforeClass
. Consulte el código fuente del método runnerForClass
método AllDefaultPossibilitiesBuilder
y runnerForClass
de JUnit3Builder
para obtener más detalles.
Nota: Este problema no está relacionado con Eclipse o Maven.
Estoy usando JUnit 4, Maven 2 y el último Eclipse. El problema es simple: me gustaría realizar alguna configuración (conectarme a una base de datos) antes de que se ejecuten mis pruebas.
Intenté @BeforeClass en muchos lugares diferentes, pero Eclipse y Maven están ignorando esto. ¿Alguna ayuda para lograr esta configuración inicial?
¡Gracias!
public abstract class BaseTestCase extends TestCase {
@BeforeClass
public static void doBeforeClass() throws Exception {
System.out.println("No good @BeforeClass");
// DO THE DATABASE SETUP
}
}
Ahora las pruebas que extienden BaseTestCase:
public class LoginActionTest extends BaseTestCase {
@Test
public void testNothing() {
System.out.println("TEST HERE");
assertEquals(true, true);
}
}
Maven y Eclipse simplemente ignoran mi @BeforeClass ??? ¿Alguna otra forma de realizar la configuración antes de las pruebas?
Sospecho que está ejecutando JUnit 3. Intente cambiar el nombre de su prueba a algo que no empiece con "prueba". Si la prueba ya no se está ejecutando, está utilizando JUnit 3 (que asume que los métodos de prueba son métodos que comienzan con "prueba").
Por favor, publique su configuración de lanzamiento de Eclipse.
Tengo un problema similar y lo solucioné especificando las versiones de archivo seguro y junit explisitly:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.8.1</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
<configuration>
<parallel>methods</parallel>
<threadCount>10</threadCount>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
Más información está aquí: http://maven.apache.org/plugins/maven-surefire-plugin/examples/junit.html
Parece que la versión junit 3.8.1 se usa transitoriamente a través de maven-resources-plugin y plexus-container-default. Puede imprimir el árbol de dependencias llamando a mvn dependency: tree . Creo que no hay otra manera de asegurarse de que el fuego use junit 4.