2008-10-06 11 views
160

¿Cómo se puede depender del código de prueba de otro módulo en Maven?Código de prueba de uso compartido en Maven

ejemplo, he 2 módulos:

  • Base
  • principal

me gustaría un caso de prueba principal de extender una clase de prueba de base de la base. es posible?

Actualización: se encontró un acceptable answer, que implica la creación de un contenedor de prueba.

+0

Parece una respuesta equivalente a la combinación de la respuesta aceptada a continuación, que es en realidad una nota en la respuesta más grande más adelante, se encuentra ahora en el sitio Maven: [Cómo crear un frasco que contiene las clases de prueba] (https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html) –

Respuesta

167

recomiendo el uso de type instead of classifier (véase también: classifier). Le dice a Maven un poco más explícitamente lo que estás haciendo (y he descubierto que a m2eclipse y q4e les gusta más).

<dependency> 
    <groupId>com.myco.app</groupId> 
    <artifactId>foo</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 
+3

¿Debería haber una entrada de dependencia separada para com.myco.app especialmente para el tipo de jar de prueba? –

+19

También recuerde agregar el archivo test-jar a la configuración de maven-jar-plugin: https://maven.apache.org/guides/mini/guide-attached-tests.html – user1338062

+5

Estaba confundido cuando leí esta respuesta por primera vez ... Eso es en realidad, porque no tiene sentido por sí solo, primero debe leer la respuesta siguiente: http://stackoverflow.com/questions/174560/sharing-test-code-in-maven#174670 – TanguyP

-3

Sí ... solo incluya el módulo base como una dependencia en Main. Si solo heredas el código de prueba, puedes usar la etiqueta de alcance para asegurarte de que Maven no incluye el código en tu artefacto cuando se implementa. Algo como esto debería funcionar:

<dependency> 
    <groupId>BaseGroup</groupId> 
    <artifactId>Base</artifactId> 
    <version>0.1.0-SNAPSHOT</version> 
    <scope>test</scope> 
</dependency> 
+1

No creo que eso sea suficiente ... – rogerdpack

11

solucionamos esto haciendo un proyecto Maven con el código de prueba como el src/main/java y añadiendo la siguiente dependencia de proyectos:

<dependency> 
     <groupId>foo</groupId> 
     <artifactId>test-base</artifactId> 
     <version>1</version> 
     <scope>test</scope> 
    </dependency> 
+0

Sí, eso funcionaría, gracias ! Vea mi comentario a continuación para la respuesta alternativa que prefiero. – flicken

+1

Usamos este enfoque también, es un poco tonto que te obliguen a buscar clasificadores o tipos (que no son básicos en Maven para la mayoría de los usuarios) y que tienes que construir JAR con un poco de esfuerzo cuando no realmente lo necesita o, como en este caso, tiene código de no prueba de facto como base solo para el código de prueba. – virgo47

150

Gracias por la base sugerencia del módulo Sin embargo, prefiero no crear un nuevo módulo solo para este propósito.

Encontré una respuesta aceptable en Surefire Maven documentation y a blog. Consulte también "How to create a jar containing test classes".

Esto crea un archivo jar de código desde src/test/java usando el jar plugin para que los módulos con pruebas puedan compartir el código.

<project> 
    <build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
     <execution> 
      <goals> 
      <goal>test-jar</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 
    </build> 
</project> 

Para utilizar la jarra de prueba adjunta que se creó anteriormente sólo tiene que especificar una dependencia en el artefacto principal con un clasificador especificado de pruebas:

<project> 
    ... 
    <dependencies> 
    <dependency> 
     <groupId>com.myco.app</groupId> 
     <artifactId>foo</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <type>test-jar</type> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
    ... 
</project> 
+14

Tenga en cuenta que puede haber problemas con el uso de pruebas test-jar. Aquí hay un problema en Maven http://jira.codehaus.org/browse/MNG-2045 y otro no relacionado en IntelliJ http://youtrack.jetbrains.net/issue/IDEA-54254 –

+0

Ha sido muy útil para mí, pero he encontrado un problema: cuando ejecuto "install -Dmaven.test".skip = true ", también se requiere la dependencia test-jar y el proceso falla –

+0

@JaviPedrera me funciona incluso si lo hago 'mvn clean install -DskipTests = true' y el archivo de prueba creará. no hay errores – Karussell

Cuestiones relacionadas