2010-01-18 20 views
8

He siguientes pruebas: estructuraEjecutar pruebas de las clases internas a través de Maven

public class WorkerServiceTest { 

    public class RaiseErrorTest extends AbstractDbUnitTest{ 
     @Test 
     public void testSomething(){ 
     } 

     ... 
    } 

    ... 
} 

Se hace porque no quiero crear un archivo de clase independiente para cada caso de prueba se extiende AbstractDbUnitTest.

El problema es que mvn test no ejecuta la prueba de mi clase interna. ¿Hay alguna manera de configurar Maven para ejecutar tales pruebas? Por supuesto, puedo crear métodos en la clase padre llamando a los métodos de la clase interna, pero quiero una forma más clara.

Respuesta

9

Sí, esto es posible mediante la nueva (bueno, no es nueva ya) Enclosed corredor (ya JUnit 4.5) que se ejecuta todas las clases internas estáticas de una clase externa.

Para usarlo, simplemente anote la clase externa con @RunWith(Enclosed.class) y establezca las clases internas estáticas.

@RunWith(Enclosed.class) 
public class WorkerServiceTest { 

    public static class RaiseErrorTest extends AbstractDbUnitTest{ 
     @Test 
     public void testSomething(){ 
     } 

     ... 
    } 

    ... 
} 

Y mvn test los ejecutará.

+0

Estoy intentando esto con maven 3.0.4 y Junit 4.11 y todavía no funciona. Desde Eclipse funciona bien, pero no con 'mvn test'. ¿Algunas ideas? – Chirlo

+0

Lo que funciona para mí, fue modificar la configuración del "experto-segura-plugin" ... pongo la siguiente configuración: ' ' detalles en [aquí] (http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html) –

+0

@CarlitosWay Puede dar algunos detalles, no se muestra en su comentario. Intenté incluir el src/main/java, y esto todavía no funciona. Gracias. –

4

explico (un poco más) la solución que he encontrado ...

Maven (que yo sepa) utiliza por defecto el plugin "experto-segura-plugin" para ejecutar las pruebas definidas en su proyecto Maven. De acuerdo con el documentation de este complemento, de forma predeterminada, excluye las pruebas que están incluidas en las clases estáticas internas (o al menos estaba con la versión que estoy usando - 2.18.1).

Entonces, lo que hice fue poner una regla de exclusión vacía; resultando en una sección de compilación de pom como esta:

<build> 
    <plugins> 
    ... 
    <!-- ~~~~~~~~~~ SUREFIRE --> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.18.1</version> 
     <configuration> 
     <excludes> 
      <exclude></exclude> 
     </excludes> 
     </configuration> 
    </plugin> 
    ... 
    </plugins> 
</build> 
+0

¡Eso funcionó! Utilicé Surefire 2.19, pero dudo que fuera un problema. Yo, por supuesto, tuve que cambiar el directorio de origen de la prueba. Gracias. –

+0

Más específicamente, la documentación se puede encontrar en la sección [incluye] (http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#includes). Aunque creo que la forma preferida sería usar el corredor 'Enclosed' en su lugar. – Brice

Cuestiones relacionadas