java - test - maven-surefire-plugin incluye/excluye precedencia
maven-surefire-plugin pom (2)
¿Has probado con las categorías JUnit?
http://www.agile-engineering.net/2012/04/unit-and-integration-tests-with-maven.html
Usando ese enfoque, podría dar a las pruebas una serie de categorías diferentes, y excluirlas / incluirlas usando eso, en lugar del nombre de la clase. Este sería un enfoque más extensible.
Cuando se utiliza el complemento maven-surefire y ambos incluyen y excluyen, ¿en qué orden se procesan? Además, si tiene 3 conjuntos de pruebas, el primero es el conjunto básico, el segundo y el tercero son casos especiales, ¿puede usar los perfiles para incluir / excluir más? ¿Cómo se fusionarán los ajustes de inclusión / exclusión del perfil? Por ejemplo, me gustaría hacer algo como esto:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.2</version>
<configuration>
<excludes>
<exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
<exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>connectedToProdNetwork</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>/org/mycompany/dataset/test/ExtractProd*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>runForAsLongAsYouNeed</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>/org/mycompany/dataset/test/LargeDataset*.java</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Y luego ser capaz de correr así:
mvn package -P connectedToProdNetwork
o
mvn package -P runForAsLongAsYouNeed
o
mvn package -P connectedToProdNetwork,runForAsLongAsYouNeed
---- ACTUALIZACIÓN -----
Usando mvn help:effective-pom -P [profileA]
Pude determinar que si especifico un solo perfil, el pom efectivo resultante será:
<configuration>
<includes>
<include>[includeFromProfileA]</include>
</includes>
<excludes>
<exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
<exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
</excludes>
</configuration>
Y si proporciono más de un perfil, mvn help:effective-pom -P [profileA],[profileB]
:
<configuration>
<includes>
<include>[includeFromProfileAOrBSeeminglyArbitraryChoice]</include>
</includes>
<excludes>
<exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
<exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
</excludes>
</configuration>
Y por último, si agrego el atributo combine.children="append"
al elemento <includes>
de las configuraciones de perfil, y proporciono ambos perfiles, mvn help:effective-pom -P [profileA],[profileB]
:
<configuration>
<includes combine.children="append">
<include>[includeFromProfileA]</include>
<include>[includeFromProfileB]</include>
</includes>
<excludes>
<exclude>/org/mycompany/dataset/test/ExtractProd*.java</exclude> <!-- requires special network connectivity -->
<exclude>/org/mycompany/dataset/test/LargeDataset*.java</exclude> <!-- requires lengthy processing -->
</excludes>
</configuration>
Sin embargo, ahora que cada archivo se especifica como un <include>
y un <exclude>
, ¿qué sucede?
---- ACTUALIZACIÓN 2 ----
Realmente ejecutando una compilación con esta configuración:
<configuration>
<includes>
<include>**/TestA.java</include>
</includes>
<excludes>
<exclude>**/TestA.java</exclude>
</excludes>
</configuration>
NO ejecuta TestA, por lo que parece que <exclude>
superará a <include>
. Tenga en cuenta que, para completar, revirtí el orden y puse <excludes>
antes de <includes>
pero el comportamiento no cambió. Si alguien puede encontrar un lugar que no sea el código fuente donde se describe este comportamiento, con gusto le daré la respuesta ...
No pude encontrar documentación oficial sobre el complemento surefire, pero de hecho, excluir-anular-incluir es un enfoque común y también es aplicado por Maven en otros contextos similares, como para los recursos.
El único funcionario y una información relacionada (que encontré) proviene de la documentación oficial de referencia de Maven POM, here :
incluye : un conjunto de patrones de archivos que especifican los archivos que se incluirán como recursos en ese directorio específico, utilizando * como comodín.
excluye : la misma estructura que incluye, pero especifica qué archivos ignorar. En conflictos entre incluir y excluir, excluye ganancias .
NOTA: Agregué el formato final en negrita en la declaración interesante.
Por lo tanto, más que probablemente el mismo enfoque se usa en los complementos oficiales de maven (en general, todos los complementos tienen el org.apache.maven.plugins groupId y maven- prefix como artifactId).