J'ai la valeur par défaut src/test/Java
dossier pour nos tests unitaires. Un dossier séparé src/integration/Java
est disponible pour les tests d'intégration.
J'ai configuré le maven-surefire-plugin
pour exécuter les tests unitaires/d'intégration dans leurs phases respectives. Cela fonctionne très bien lorsque les classes compilées sont dans le bon répertoire. Malheureusement, Maven ne prend en charge qu'un dossier source de test et un dossier de sortie de test.
Avec le plugin mavens build-helper, je pourrais ajouter un autre dossier de source de test mais les classes compilées seront générées dans test-classes
mais je veux compiler les classes de src/integration/Java
en target/integration-test-classes
. Est-ce possible?
src/test/Java > target/test-classes
src/integration/Java > target/integration-test-classes
PS: je n'aime pas cette exclusion/inclusion sur la solution de base du package (exclure tout **/it/**
fichiers de la phase de test par défaut et exclure tous les **/unit/**
de la phase d'intégration.
Désolé, il n'y a aucun moyen de le faire, à mon humble avis même avec un certain piratage à l'esprit. Le concept est qu'il n'y a qu'un seul répertoire cible pour les classes compilées et un pour les classes de test compilées (même <build>
le schéma des balises expose cela). Pour être honnête, je ne pense pas vraiment que cela devrait être possible avec Maven. Maven favorise une conception droite, propre et lisible de votre application, en utilisant des modules bien conçus.
Si vous pensez que ce que vous voulez vraiment faire, c'est créer un module de tests d'intégration. C'est la pratique courante, en fait. Jusqu'à présent, j'ai toujours eu un module de test d'intégration séparé et je n'ai jamais eu de problème avec ça. Vous devez bien sûr dépendre de tous les modules nécessaires pour exécuter ces tests. Vous pouvez même dépendre des classes de test d'autres modules en utilisant <type>test-jar</type>
avec votre déclaration de dépendance comme mentionné ici:
http://maven.Apache.org/guides/mini/guide-attached-tests.html
Je n'aime pas cette méthode, cependant, et préfère généralement avoir un module séparé avec des éléments de support de test, comme des classes de base pour les cas de test JUnit, etc.
D'après ce que vous avez écrit, il semble que vous n'ayez pas nommé correctement vos tests d'intégration et que vous n'ayez pas utilisé le maven-failafe-plugin pour vos tests d'intégration. Sur la base de la convention du maven-fail-safe-plugin vous devez nommer vos tests d'intégration comme *IT.Java
. Si vous avez nommé vos tests d'intégration de manière appropriée, vous pouvez gérer cela avec une configuration plus ou moins comme celle-ci:
<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>
Avec ce qui précède, il est possible de maintenir les tests d'intégration dans le même module. Mais cela ne résoudra pas l'idée d'avoir les classes de tests d'intégration compilées dans un dossier séparé.
Parfois, il est préférable d'avoir un module de test d'intégration séparé qui ne contient que les tests d'intégration (ce qui se traduit par une construction multi-modules). Si vous souhaitez quitter les conventions de Maven, vous pouvez essayer de configurer le plugin maven-compiler pour utiliser un chemin de sortie différent (par exemple. target/integration-tests/classes
) qui ne pense pas fonctionnera vraiment.
Si vous souhaitez uniquement modifier le dossier source du test unitaire (plutôt que d'en ajouter un autre), modifiez simplement l'élément testSourceDirectory
:
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
C'est utile si tous vos tests unitaires sont écrits en groovy. (Mais vous devrez également configurer maven pour compiler également votre code groovy - voir groovy-Eclipse-maven-plugin ou build-helper-maven-plugin .)