Question Comment exécuter UnitTests dans maven qui se trouve dans le dossier src / test-integration / java


Lorsque nous disons mvn test, la méthode habituelle est que maven recherche les tests présents dans le dossier src / test / java. Mais j'ai mes tests dans des dossiers différents, à savoir src / integration-test / java. Comment exécuter les tests présents dans ce dossier via la ligne de commande?

Merci d'avance,

Manoj.


20
2018-05-28 05:23


origine


Réponses:


Tout d'abord, vous ne devez pas exécuter ces tests d'intégration via le tester  cycle de la vie, cause test de pré-intégration, test d'intégration et test post-intégration phase du cycle de vie existe. En dehors de cela, pour les tests d'intégration, le maven-failafe-plugin est responsable.

Il existe plusieurs options pour gérer vos situations. Vous devez d'abord suivre le conventions de nommage pour les tests d'intégration

<includes>
 <include>**/IT*.java</include>
 <include>**/*IT.java</include>
 <include>**/*ITCase.java</include>
</includes>

ce qui signifie mettre les tests d'intégration dans le dossier par défaut src / test / java. Si vous avez une construction multi-module, il serait préférable d'avoir un module séparé contenant uniquement les tests d'intégration ou vous pouvez choisir le chemin que vous avez choisi pour utiliser un dossier séparé (ce qui n'est pas le meilleur):

Vous devez d'abord ajouter le dossier en utilisant le buildhelper-maven-plugin pour que ces tests d'intégration soient compilés comme ceci:

  <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>process-resources</phase>
        <goals>
          <goal>add-test-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>src/integration-test/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>

et vous devez configurer le plugin maven-failafe-like comme ceci:

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>2.14.1</version>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Après avoir configuré, vous pouvez exécuter vos tests d'intégration via:

mvn verify

27
2018-05-28 06:39



@khmarbaise a raison avec sa recommandation (donc +1 pour cela) mais je veux répondre à votre question sans spéculer sur les raisons pour lesquelles la source de test se trouve ailleurs.

Si vos tests sont situés dans un autre répertoire que le standard src/test/java répertoire, la solution la plus simple est de changer la valeur par défaut du testSourceDirectory paramètre de configuration qui est défini dans le Super POM.

par exemple. pour src/foobar/java utilisation

<build>
  <testSourceDirectory>src/foobar/java</testSourceDirectory>
</build>

alors vous pouvez simplement courir mvn test pour exécuter les tests.


Solution plus complexe ...

Si vous ne voulez pas changer la configuration de pom.xml, vous pouvez spécifier la testSourceDirectory paramètre sur la ligne de commande comme ceci:

mvn -DtestSourceDirectory=src/foobar/java clean test

Mais assurez-vous que vos sources sont compilées. Sinon, ils ne seront pas trouvés et exécutés. Dans l'exemple ci-dessus, les sources de test ne sont pas placées à un emplacement qui est compilé par défaut, nous devons néanmoins changer le pom et ajouter le répertoire à la liste des sources de test en utilisant le buildhelper brancher:

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

Si vous ne voulez pas changer la configuration de la valeur par défaut dans le pom et ne voulez pas passer le nouveau répertoire à la ligne de commande, vous devez configurer le chemin dans le plugin maven-buildhelper et le plugin maven-surefire dans votre pom. .xml comme ceci:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.8</version>
            <executions>
                <execution>
                    <id>add-test-source</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/foobar/java</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.14.1</version>
            <configuration>
                <testSourceDirectory>src/foobar/java</testSourceDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

Maintenant encore la simple utilisation de mvn test exécutera le test à l'emplacement non standard.


13
2018-05-28 07:52