2012-04-13 30 views
23

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.¿Cómo agregar otra carpeta fuente de prueba a Maven y compilarla en una carpeta separada?

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 resultados de prueba.

Con mavens acumulación de ayudante de plug-in que podría añadir otra carpeta de prueba de código, pero las clases compiladas se generará 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 este excluir/incluir en la solución de paquete base (excluir todos los **/it/** archivos de la fase de prueba por defecto, y excluir toda **/unit/** de la fase de integración

+1

Mueva sus pruebas de integración a un módulo maven separado. –

Respuesta

10

Lo sentimos, no hay. La idea es que solo hay un directorio de destino para las clases compiladas y uno para las clases de prueba compiladas (incluso el esquema de etiqueta <build> expone esto). Para ser sincero, realmente no creo debería ser posible con Maven. Maven promueve el diseño recto, 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 tuve un módulo de prueba de integración 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 ha mencionado aquí:

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

no me gusta este método, sin embargo, y por lo general prefieren tener módulo separado con la materia de soporte de pruebas , como clases base para casos de prueba JUnit, etc.

30

Según lo que ha escrito, parece que no ha nombrado correctamente sus pruebas de integración y no ha utilizado 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 usted designó a sus pruebas de integración apropiada puede manejar eso con una configuración más o menos así:

<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 llevar a cabo las pruebas de integración dentro del mismo módulo. Pero esto no resolverá la idea de tener las clases compiladas de pruebas de integración en una carpeta separada.

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

+1

Basado en esta respuesta https://github.com/alimate/maven-source-sets –

5

Si sólo desea cambiar la carpeta de origen de prueba de unidad (en lugar de añadir una adicional), basta con cambiar el elemento testSourceDirectory:

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

Esto es útil si todas las pruebas unitarias están escritos en maravilloso . (Pero también necesitará configurar maven para compilar su código groovy también - vea el groovy-eclipse-maven-plugin o el build-helper-maven-plugin.)

Cuestiones relacionadas