web-dev-qa-db-fra.com

Partage du code de test dans Maven

Comment pouvez-vous compter sur le code de test d'un autre module de Maven?

Exemple, j'ai 2 modules:

  • Base
  • Principale

Je souhaite qu'un scénario de test dans Main étende une classe de test de base dans Base. Est-ce possible?

Mise à jour: Vous avez trouvé un réponse acceptable , qui implique la création d'un fichier jar de test.

175
flicken

Je recommande d'utiliser type à la place du classificateur (voir aussi: classificateur ). Cela dit un peu plus explicitement à Maven ce que vous faites (et j'ai trouvé que m2Eclipse et q4e l'aiment mieux).

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

Merci pour la suggestion de module de base. Cependant, je préférerais ne pas créer de nouveau module uniquement dans ce but.

Nous avons trouvé une réponse acceptable dans les documentation Surefire Maven et n blog . Voir aussi " Comment créer un jar contenant des classes de test ".

Cela crée un fichier jar de code à partir de src/test/Java en utilisant le plugin jar afin que les modules avec des tests puissent partager le code.

<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>

Pour utiliser le fichier JAR de test ci-dessus, créé ci-dessus, vous devez simplement spécifier une dépendance à l'artefact principal avec un classificateur de tests spécifié:

<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> 
171
flicken

Nous avons résolu ce problème en créant un projet maven avec le code de test src/main/Java et en ajoutant la dépendance suivante aux projets:

    <dependency>
        <groupId>foo</groupId>
        <artifactId>test-base</artifactId>
        <version>1</version>
        <scope>test</scope>
    </dependency>
12
sal