test surefirereportparameters pom plugin org compiler java maven maven-surefire-plugin

java - surefirereportparameters - ¿Cómo agregar otra carpeta de origen de prueba a Maven y compilarla en una carpeta separada?



org apache maven plugin surefire surefirereportparameters jar (3)

Tengo la carpeta predeterminada src/test/java para nuestras pruebas unitarias. Una carpeta separada src/integration/java está disponible para las pruebas de integración.

Configuré el maven-surefire-plugin para ejecutar las pruebas de unidad / integración en sus respectivas fases. Esto funciona muy bien cuando las clases compiladas están en el directorio correcto. Desafortunadamente, Maven solo admite una carpeta de origen de prueba y una carpeta de salida de prueba.

Con mavens build-helper plugin podría agregar otra carpeta de fuente de prueba pero las clases compiladas se generarán en test-classes pero quiero compilar las clases de src/integration/java en target/integration-test-classes . es posible?

src/test/java > target/test-classes src/integration/java > target/integration-test-classes

PD: No me gusta esto excluir / incluir en la solución base del paquete (excluir todos los archivos **/it/** de la fase de prueba predeterminada, y excluir todos **/unit/** de la fase de integración.


Lo siento, no hay forma de hacerlo, en mi humilde opinión, incluso con algo de piratería en mente. El concepto es que solo hay un directorio de destino para las clases compiladas y otro para las clases de prueba compiladas (incluso el esquema de la etiqueta <build> expone). Para ser honesto, realmente no creo que sea posible con Maven. Maven promueve el diseño directo, limpio y legible de su aplicación, mediante el uso de módulos bien diseñados.

Si piensa lo que realmente quiere hacer es crear un módulo de pruebas de integración. Esa es la práctica común, de hecho. Hasta ahora siempre he tenido un módulo de prueba de integración por separado y nunca tuve problemas con eso. Por supuesto, debe depender de todos los módulos necesarios para ejecutar estas pruebas. Incluso puede depender de las clases de prueba de otros módulos utilizando <type>test-jar</type> con su declaración de dependencia como se menciona aquí:

http://maven.apache.org/guides/mini/guide-attached-tests.html

Sin embargo, no me gusta este método, y generalmente prefiero tener un módulo separado con material de soporte de prueba, como clases base para casos de prueba de JUnit, etc.


Según lo que ha escrito, parece que no nombró correctamente sus pruebas de integración y que no usó el maven-failsafe-plugin para sus pruebas de integración. De acuerdo con la convención de maven-failsafe-plugin , debe nombrar sus pruebas de integración como *IT.java . Si nombró adecuadamente sus pruebas de integración, puede manejar eso con una configuración más o menos como esta:

<project ...> [...] <build> [...] <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.9.1</version> <executions> <execution> <id>add-test-source</id> <phase>generate-test-sources</phase> <goals> <goal>add-test-source</goal> </goals> <configuration> <sources> <source>src/integration/java</source> </sources> </configuration> </execution> </executions> </plugin> [...] </build> [...] </project>

Con lo anterior es posible mantener las pruebas de integración dentro del mismo módulo. Pero esto no resolverá la idea de tener las clases de pruebas de integración compiladas en una carpeta separada.

A veces es mejor tener un módulo de prueba de integración que contenga solo las pruebas de integración (lo que resulta en una compilación de varios módulos). Si desea abandonar las convenciones de Maven, puede intentar configurar el complemento compilador-maven para usar una ruta de salida diferente (por ejemplo, target/integration-tests/classes ) que no creo que realmente funcione.


Si solo desea cambiar la carpeta de origen de prueba de unidad (en lugar de agregar una adicional), simplemente cambie el elemento testSourceDirectory :

<build> <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>

Esto es útil si todas sus pruebas de unidad están escritas en groovy. (Pero también necesitarás configurar maven para compilar tu maravilloso código - ver el groovy-eclipse-maven-plugin o el groovy-eclipse-maven-plugin build-helper-maven-plugin ).