2010-07-18 16 views
8

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.JUnit + Maven + Eclipse: ¿Por qué @BeforeClass no funciona?

Probé @BeforeClass en muchas ubicaciones 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 se extienden BaseTestCase:

public class LoginActionTest extends BaseTestCase { 

@Test 
public void testNothing() { 

    System.out.println("TEST HERE"); 

    assertEquals(true, true); 
} 
} 

Maven y Eclipse simplemente ignorar mis @BeforeClass ??? ¿Alguna otra forma de realizar la configuración antes de las pruebas?

+0

¿Pueden confirmar cómo lanzan su caso de prueba desde Eclipse? ¿Estás usando JUnit4? – ShiDoiSi

+0

Estoy usando JUnit 4. Estoy iniciando con Ejecutar como ... -> JUnit Test ... El problema está relacionado con la extensión de TestCase. Si renuncias a extender esa clase, entonces estás bien. En realidad, no necesita esta clase ya que puede importar la clase Assert para realizar la comprobación ... No extienda TestCase y todo funcione como se espera ... – TraderJoeChicago

Respuesta

11

Sergio, tenía 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 conoce la anotación @BeforeClass. Consulte el código fuente del método runnerForClass de AllDefaultPossibilitiesBuilder y runnerForClass método de JUnit3Builder para obtener más detalles.

Nota: Este problema no está relacionado con Eclipse o Maven.

+0

Sí. Dejé de extender TestCase y todo funciona bien. – TraderJoeChicago

1

Sospecho que está ejecutando con JUnit 3. Intente cambiar el nombre de su prueba a algo que no comience 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 inicio de Eclipse.

1

que tienen un problema similar y me fijo especificando versiones surefile 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 JUnit 3.8.1 versión se utiliza de forma transitoria a través maven- resource-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 uso del fuego sea junit 4.

Cuestiones relacionadas