177 votes

Partage du code de test dans Maven

Comment dépendre du code de test d'un autre module dans Maven ?

Exemple, j'ai 2 modules :

  • Base
  • Principal

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

Mise à jour : J'ai trouvé un réponse acceptable ce qui implique la création d'un bocal de test.

184voto

Ben Points 1233

Je recommande d'utiliser type au lieu de classificateur (voir aussi : classificateur ). Il indique à Maven un peu plus explicitement ce que vous faites (et j'ai constaté que m2eclipse et q4e l'apprécient davantage).

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

173voto

flicken Points 5887

Merci pour la suggestion du module de base. Cependant, je préfère ne pas créer un nouveau module dans ce seul but.

J'ai trouvé une réponse acceptable dans le Documentation Maven Surefire y un blog . Voir aussi " Comment créer un jar contenant des classes de test ".

Cela crée un fichier jar du code de src/test/java en utilisant le plugin jar afin que les modules avec des tests puissent partager du 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>

Afin d'utiliser le JAR de test joint qui a été créé ci-dessus, il suffit de spécifier une dépendance sur 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>

12voto

sal Points 8058

Nous avons résolu ce problème en créant un projet maven avec le code de test comme 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>

-3voto

Steve Moyer Points 4312

Oui... il suffit d'inclure le module Base comme dépendance dans Main. Si vous héritez uniquement du code de test, vous pouvez utiliser la balise scope pour vous assurer que Maven n'inclut pas le code dans votre artefact lors du déploiement. Quelque chose comme ceci devrait fonctionner :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X