J'ai un projet multi-module maven2 et dans chacun de mes modules enfants j'ai des tests JUnit qui sont nommés Test.java
et Integration.java
pour les tests unitaires et les tests d'intégration respectivement. Quand j'exécute:
mvn test
tous les tests JUnit *Test.java
des modules enfants sont exécutés. Quand j'exécute
mvn test -Dtest=**/*Integration
aucun des Integration.java
tests n'est exécuté dans les modules enfants.
Celles-ci me semblent être exactement la même commande mais celle avec -Dtest = / * Integration ** ne fonctionne pas, elle affiche 0 test en cours d'exécution au niveau parent, il n'y a pas de tests
Réponses:
Vous pouvez configurer Surefire de Maven pour exécuter des tests unitaires et des tests d'intégration séparément. Dans la phase de test unitaire standard, vous exécutez tout ce qui ne correspond pas à un test d'intégration. Vous créez ensuite une deuxième phase de test qui exécute uniquement les tests d'intégration.
Voici un exemple:
la source
Le cycle de vie des builds Maven inclut désormais la phase de «test d'intégration» pour l'exécution des tests d'intégration, qui sont exécutés séparément des tests unitaires exécutés pendant la phase de «test». Il s'exécute après "package", donc si vous exécutez "mvn verify", "mvn install" ou "mvn deploy", des tests d'intégration seront exécutés en cours de route.
Par défaut, l' intégration test exécute les classes de test nommés
**/IT*.java
,**/*IT.java
et**/*ITCase.java
, mais cela peut être configuré.Pour plus de détails sur la façon de câbler tout cela, consultez le plugin Failsafe , la page d'utilisation Failsafe (pas correctement liée à la page précédente au moment où j'écris ceci), et consultez également ce billet de blog Sonatype .
la source
mvn integration-test
exécute également des tests unitaires (en utilisant via surefire) mais n'exécutemvn failsafe:integration-test
que les tests d'intégration de sécurité.package
phase, cela signifie que je devrais mettre tout mon code source informatique Java soussrc/main/java
au lieu desrc/test/java
droite?J'ai fait EXACTEMENT ce que vous vouliez faire et cela fonctionne très bien. Les tests unitaires "* Tests" sont toujours exécutés et "* IntegrationTests" ne s'exécutent que lorsque vous effectuez une vérification mvn ou une installation mvn. Voici l'extrait de mon POM. serg10 avait presque raison ... mais pas tout à fait.
Bonne chance!
la source
clean compile integration-test -Dmaven.test.failure.ignore=false
Vous pouvez les diviser très facilement en utilisant les catégories JUnit et Maven.
Ceci est montré très, très brièvement ci-dessous par des tests unitaires et d'intégration.
Définir une interface de marqueur
La première étape du regroupement d'un test à l'aide de catégories consiste à créer une interface de marqueurs.Cette interface sera utilisée pour marquer tous les tests que vous souhaitez exécuter comme tests d'intégration.
Marquez vos classes de test
Ajoutez l'annotation de catégorie en haut de votre classe de test. Il prend le nom de votre nouvelle interface.
Configurer les tests unitaires Maven
La beauté de cette solution est que rien ne change vraiment pour le côté test unitaire des choses.Nous ajoutons simplement une configuration au plugin maven surefire pour qu'il ignore les tests d'intégration.
Lorsque vous effectuez un
mvn clean test
, seuls vos tests unitaires non marqués seront exécutés.Configurer les tests d'intégration Maven
Là encore, la configuration est très simple.Nous utilisons le plugin de sécurité standard et le configurons pour exécuter uniquement les tests d'intégration.
La configuration utilise un objectif d'exécution standard pour exécuter le plug-in de sécurité pendant la phase de test d'intégration de la construction.
Vous pouvez maintenant faire un
mvn clean install
.Cette fois-ci, ainsi que les tests unitaires en cours d'exécution, les tests d'intégration sont exécutés pendant la phase de test d'intégration.
la source
Vous devriez essayer d'utiliser le plugin de sécurité maven . Vous pouvez lui dire d'inclure un certain ensemble de tests.
la source
maven-failsafe-plugin
est allé à Plugin Graveyardfailsafe
plugin a été déplacémaven-failsafe-plugin
. Il semble que lemaven-failsafe-plugin
est toujours actif (les documents ont été envoyés pour la dernière fois en mars 2014).Par défaut, Maven exécute uniquement les tests qui ont Test quelque part dans le nom de la classe.
Renommez en IntegrationTest et cela fonctionnera probablement.
Vous pouvez également modifier la configuration de Maven pour inclure ce fichier, mais il est probablement plus facile et préférable de nommer vos tests SomethingTest.
Des inclusions et exclusions de tests :
la source
Une autre façon d'exécuter des tests d'intégration avec Maven consiste à utiliser la fonction de profil:
L'exécution de 'mvn clean install' exécutera la construction par défaut. Comme spécifié ci-dessus, les tests d'intégration seront ignorés. L'exécution de 'mvn clean install -P integration-tests' inclura les tests d'intégration ( j'ignore également mes tests d'intégration de staging). De plus, j'ai un serveur CI qui exécute mes tests d'intégration tous les soirs et pour cela j'émets la commande 'mvn test -P integration-tests' .
la source
Vous pouvez suivre la documentation de maven pour exécuter les tests unitaires avec la version et exécuter les tests d'intégration séparément.
Cela vous permettra d'exécuter avec tous les tests d'intégration désactivés par défaut. Pour les exécuter, vous utilisez cette commande:
la source
Vous devez utiliser Maven Surefire plug - in pour exécuter des tests unitaires et Maven plug - in failsafe pour exécuter des tests d'intégration.
Veuillez suivre ci-dessous si vous souhaitez basculer l'exécution de ces tests à l'aide d'indicateurs.
Configuration Maven
Ainsi, les tests seront ignorés ou commutés selon les règles de drapeau ci-dessous:
Les tests peuvent être ignorés par les indicateurs ci-dessous:
-DskipTests
ignore les tests unitaires et d'intégration-DskipUnitTests
ignore les tests unitaires mais exécute les tests d'intégration-DskipIntegrationTests
ignore les tests d'intégration mais exécute les tests unitairesExécution de tests
Exécutez ci-dessous pour exécuter uniquement des tests unitaires
Vous pouvez exécuter la commande ci-dessous pour exécuter les tests (à la fois unité et intégration)
Afin d'exécuter uniquement les tests d'intégration, suivez
Ou sauter les tests unitaires
Aussi, pour sauter les tests d'intégration pendant
mvn install
, suivezVous pouvez ignorer tous les tests en utilisant
la source