2010-06-23 43 views
54

Usando JUnit 4.8 y las nuevas anotaciones @Category, ¿hay alguna manera de elegir un subconjunto de categorías para ejecutar con el plugin Surefire de Maven?¿Cómo ejecutar pruebas JUnit por categoría en Maven?

Por ejemplo tengo:

@Test 
public void a() { 
} 

@Category(SlowTests.class) 
@Test 
public void b() { 
} 

y me gustaría a ejecutar todas las pruebas no lentas como en: (tenga en cuenta que los -Dtest.categories estaba compuesto por mí ...).

mvn test -Dtest.categories=!SlowTests // run non-slow tests 
mvn test -Dtest.categories=SlowTests // run only slow tests 
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests 
mvn test // run all tests, including non-categorized 

Así que el punto es que yo no quiero tener que crear conjuntos de pruebas (Maven simplemente recoge todas las pruebas unitarias en el proyecto que es muy conveniente) y me gustaría Maven para ser capaz de recoger las pruebas por categoría Creo que acabo de inventar las categorías -Dtest, así que me preguntaba si hay una instalación similar que pueda usar.

+0

Ver [TestNG Mezcla y junit] (http://stackoverflow.com/questions/9172820/mixing-testng-junit-with-maven-surefire-plugin-versión-2-11-and-higher-for-integ) para más detalles. Desde maven-surefire-plugin versión 2.11 las categorías son compatibles –

Respuesta

1

No es exactamente lo mismo pero utilizando el plugin surefire, las clases de prueba se pueden elegir según el nombre del archivo. Sin embargo, no estás usando las Categorías Junit.

Un ejemplo para ejecutar solo pruebas DAO.

<executions> 
    <execution> 
    <id>test-dao</id> 
     <phase>test</phase> 
      <goals> 
      <goal>test</goal> 
     </goals> 
      <configuration> 
      <excludes> 
       <exclude>none</exclude> 
      </excludes> 
      <includes>     
       <include>**/com/proy/core/dao/**/*Test.java</include> 
      </includes> 
     </configuration> 
    </execution> 

http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

67

Maven ya se ha actualizado y se puede utilizar categorías.

Un ejemplo de la Surefire documentation:

<plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.11</version> 
     <configuration> 
     <groups>com.mycompany.SlowTests</groups> 
     </configuration> 
</plugin> 

Esto ejecutará ninguna clase con la anotación @Category(com.mycompany.SlowTests.class)

+7

La versión 2.11 no funcionó para mí, porque Surefire siguió ignorando los grupos que especifiqué. Actualizar al plugin surefire versión 2.12.3 hizo el truco –

+5

¿Pero cómo se hacen múltiples configuraciones para diferentes categorías? Es decir, el OP deseaba poder especificar una categoría en la línea de comando, pero si la categoría se especifica en el POM, ¿cómo se especifica una en la línea de comando? –

+0

¡Atención! La versión 2.11 ignora grupos! ¡El ejemplo proporcionado en http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html#Using_JUnit_Categories sigue siendo incorrecto! – Heezer

38

En base a esta blog post - y simplificar - agregar esto a su pom.xml:

<profiles> 
    <profile> 
     <id>SlowTests</id> 
     <properties> 
      <testcase.groups>com.example.SlowTests</testcase.groups> 
     </properties> 
    </profile> 
    <profile> 
     <id>FastTests</id> 
     <properties> 
      <testcase.groups>com.example.FastTests</testcase.groups> 
     </properties> 
    </profile> 
</profiles> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.13</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>2.13</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <groups>${testcase.groups}</groups> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

luego en la línea de comando

mvn install -P SlowTests 
mvn install -P FastTests 
mvn install -P FastTests,SlowTests 
+0

La versión 2.13 del plugin surefire no funcionó para mí. Obtuve este error: "groups/excludedGroups requiere TestNG o JUnit48 + en classpath de prueba de proyecto", aunque estoy usando Junit 4.11. La degradación del plugin surefire a 2.12.2 resolvió el error. –

+0

Esto funcionó para mí, utilizando la versión 2.17 de Surefire. Tuve que cambiar la dependencia de org.apache.maven.surefire: surefire-junit47: 2.13 a org.apache.maven.surefire: common-junit48: 2.17. – Kkkev

+0

ejecutando dos perfiles togather no funcionó para mí –

5

Puede utilizar

mvn test -Dgroups="com.myapp.FastTests, com.myapp.SlowTests" 

Pero asegurarse de configurar correctamente el plugin segura experto

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.11</version> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.maven.surefire</groupId> 
     <artifactId>surefire-junit47</artifactId> 
     <version>2.12.2</version> 
    </dependency> 
    </dependencies> 
</plugin> 

Ver documentos en: https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html

16

que tenía un caso similar en el que quiero ejecutar todas las pruebas EXCEPTO una categoría determinada (por ejemplo, porque tengo cientos de pruebas no categorizadas heredadas, y no puedo/no quiero modificar cada una de ellas)

El plugin segura experta permite excluir categorías, por ejemplo:

<profiles> 
    <profile> 
     <id>NonSlowTests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <excludedGroups>my.category.SlowTest</excludedGroups> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
+0

Caliente ¿Podría configurar para ejecutar solo un grupo específico? – 2Big2BeSmall

+1

@Francy acaba de ejecutar con el perfil correspondiente, de este ejemplo: mvn test -P NonSlowTests – Joel

+0

¿Se pueden excluir varios grupos? –

3

he perdido mucho tiempo en este error "grupos/excludedGroups requieren TestNG o JUnit48 + en la ruta de clase de prueba del proyecto" porque pensaba que estaba usando una mala versión de junit, o una versión incorrecta del plugin surefire, o una combinación que no encaja.

No era nada de eso: en mi proyecto tenía un módulo de "configuración" que se creó antes del módulo que quería probar. Este módulo no tenía ninguna dependencia junit -> no tenía junit en la ruta de clase ...

Este error puede ayudar a los demás ...

Cuestiones relacionadas