J'ai quelques tests complexes que l' utilisation de projets autonomes Maven pour valider un code. Ces projets Maven sont emballés par les programatically essais et les résultants .jar
fichiers sont ensuite utilisés. Ces projets font appel à des artefacts de mon principal projet multi-modules à la version actuelle , dans leur pom.xml
. En d' autres termes, les tests des projets Maven doivent être en mesure de trouver des objets fournis par mon projet principal.
Dans un IDE, tout fonctionne bien puisque les objets actuels de mon projet principal sont résolus dynamiquement (pas référentiel local requis) lorsque je lance les tests. Aussi, je peux installer ces versions snapshot avant l' exécution des tests. Mais quand je veux sortir une nouvelle version de mon projet, je aurais besoin release:prepare
de:
- Mettre à jour les versions (supprimer tous les « -snapshot »).
- Exécute tous les tests qui ne se terminent pas
*.PostInstallTest.java
. - Emballez les artefacts et les installer localement.
- Exécute alors les tests de cette fin avec
*.PostInstallTest.java
, étant donné que ces tests ont besoin d' accéder aux objets précédemment installés! Si les tests échouent, aucun commits ne par poussé parrelease:prepare
.
Je sais que ce n'est pas parfait, car une version « mauvais » des artefacts pourrait être installé localement, lorsque les tests « PostInstallTest » échouent. Mais je prefere que de ne pas avoir ces tests fonctionnent à tous!
À l' heure actuelle, mon idée de travail est seulement de définir une propriété du système lorsque le release
profil est utilisé, et ont les *.PostInstallTest.java
fichiers eux - mêmes désactiver si cette propriété existe. De cette façon, ces tests fonctionne encore quand RAN dans mon IDE (sans release
profil), mais ne serait pas exécuté du tout lors d' une release:prepare
commande. Mais, encore une fois, je les aime à exécuter.
Je regardais la preparationGoals configuration du Maven Plugin mais je presse ne sais pas comment il pourrait me aider. J'ai aussi regardé le plugin Maven Failsafe semble , mais il ne semble pas soutenir la phase « installer ».
Alors, ma question : Y at - il un moyen de faire quelques tests après la phase « installation », quand release:prepare
est utilisé (ou à la phase « installation », mais après le plug - in par défaut)?
MISE À JOUR: Voici un schéma rapide, si elle peut aider à comprendre ce qui se passe:
MISE À JOUR 2 : Je n'ai pas testé correctement Failsafe, après tout. Il fonctionne à la phase « installer »! Regardez la réponse de df778899.
Je ne pense pas que ce soit une réponse encore, mais développiez @ point de Lesiak, le plugin Failsafe semble bien par lui-même dans la phase d'installation. Par exemple:
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Résultats dans cette sortie:
...
[INFO] --- maven-install-plugin:2.4:install (default-install) @ it-test ---
[INFO] Installing ...\target\it-test-0.0.1-SNAPSHOT.jar to ...\.m2\repository\group\it-test\0.0.1-SNAPSHOT\it-test-0.0.1-SNAPSHOT.jar
[INFO] Installing ...\pom.xml to ...\.m2\repository\group\it-test\0.0.1-SNAPSHOT\it-test-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --- maven-failsafe-plugin:3.0.0-M3:integration-test (default) @ it-test ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running TheIT
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.093 s - in TheIT
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-failsafe-plugin:3.0.0-M3:verify (default) @ it-test ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
Notez comment les maven-failsafe-plugin:3.0.0-M3:integration-test
et maven-failsafe-plugin:3.0.0-M3:verify
objectifs sont exécutés à la fin - dans la install
phase.