J'ai une version Maven dans laquelle j'utilise le plugin SureFire pour exécuter des tests unitaires et le plugin FailSafe pour exécuter des tests d'intégration. Je voudrais un moyen d'exécuter uniquement les tests du plugin FailSafe.
Ce n'est pas une bonne solution pour moi d'ajouter différents profils ou quoi que ce soit dans le pom, car c'est une construction multimodule et je ne veux pas avoir à modifier le pom de chaque module.
Il y a skip.tests
et maven.test.skip
et skipTests
qui arrêtent tous les tests, et skipITs
, qui arrête uniquement le plugin de sécurité.
Alors, y a-t-il un indicateur de ligne de commande pour Maven comme skipITs
, mais à la place avec la fonctionnalité de "onlyITs"?
maven
build
integration-testing
maven-surefire-plugin
maven-failsafe-plugin
Matthew Gilliard
la source
la source
maven.test.skip
ouskipTests
?skipTests
ne saute que les tests infaillibles, pas le test de sécurité! C'est peut-être une nouvelle fonctionnalité?Réponses:
J'ai trouvé que le moyen le plus simple de ne sauter que les tests infaillibles est de configurer surefire ( mais pas à sécurité intégrée ) comme suit:
Cela vous permet d'exécuter
mvn verify -Dskip.surefire.tests
et seuls les tests infaillibles, et non infaillibles, seront ignorés; il exécutera également toutes les autres phases nécessaires, y compris la pré-intégration et la post-intégration, et exécutera également l'verify
objectif qui est nécessaire pour échouer réellement votre build maven si vos tests d'intégration échouent.Notez que cela redéfinit la propriété utilisée pour spécifier que les tests doivent être ignorés, donc si vous fournissez le canonical
-DskipTests=true
, surefire l'ignorera mais la sécurité la respectera, ce qui peut être inattendu, surtout si vous avez déjà des builds / utilisateurs spécifiant cet indicateur. Une solution de contournement simple semble être de choisir par défautskip.surefire.tests
la valeur deskipTests
dans votre<properties>
section du pom:Si vous en avez besoin, vous pouvez fournir un paramètre analogue appelé
skip.failsafe.tests
à sécurité intégrée, mais je ne l'ai pas trouvé nécessaire - car les tests unitaires s'exécutent généralement dans une phase antérieure, et si je veux exécuter des tests unitaires mais pas des tests d'intégration, je l'exécuterais latest
phase au lieu de laverify
phase. Vos expériences peuvent varier!Ces
skip.(surefire|failsafe).tests
propriétés devraient probablement être intégrées dans le code sûr / sécurisé lui-même, mais je ne suis pas sûr de savoir à quel point cela violerait l'éthos «ils sont exactement le même plugin, sauf pour une petite différence».la source
<skipTests>false</skipTests>
qui fonctionne toujours avec n'importe quelle combinaison de -DskipTests ou -Dskip.surefire.tests car les arguments de ligne de commande semblent écraser les propriétés stackoverflow.com/questions/13708738 /… Vous voudrez peut-être ajouter cela à votre solution<skipTests>${skip.surefire.tests}</skipTests>
ne fonctionne pas avec lamaven-surefire-plugin
version3.0.0-M3
. Tous les tests infaillibles sont toujours en cours. Quelqu'un d'autre a trouvé ça? La solution ci-dessous de Sean Patrick Floyd fonctionne cependant.Une solution de contournement serait d'appeler:
Certes, c'est moche, mais cela peut résoudre votre problème.
Ou (un autre hack):
Référence:
surefire:test#test
surefire:test#failIfNoTests
la source
verify
place deintegration-test
dans la 2ème solution.failsafe:verify
à la fin du premier hack (mvn clean test-compile failsafe:integration-test failsafe:verify
), la compilation échouera si l'un des tests d'intégration échoue.J'utilise le code du blog Antonio Goncalves , qui fonctionne parfaitement.
Vous pouvez utiliser les propriétés suivantes:
-DskipUTs=true
pour sauter des tests infaillibles.-DskipITs=true
pour sauter les tests de sécurité.-DskipTests=true
pour sauter tous les tests.Le
pom.xml
est comme suit:la source
skipITs
par défaut.J'espère que cela t'aides!
Essayez d'exécuter le test uniquement avec FailSafe (plugin pour le test d'intégration - il vous permettra d'exécuter uniquement des tests d'intégration avec ce type de nom, par défaut: * / IT .java, ** / IT.java, * /*ITCase.java ;, mais vous pouvez facilement changer cela à partir du fichier pom)
Et lorsque vous souhaitez utiliser uniquement SureFire (plugin pour les tests unitaires)
ou un test à la fois avec:
la source
J'aime ça, donc toutes les phases sont normalement exécutées:
la source
Pour développer les commentaires de @danidemi et @GuillaumeHusta:
Donc, pour sauter les tests unitaires, mais pas les tests d'intégration, vous pouvez le faire si vous utilisez la dernière version du plugin Failsafe:
(veuillez donner aux commentaires mentionnés un vote positif si cela vous aide)
la source
Essayez d'exécuter votre intégration ou vos tests unitaires dans un profil distinct. Ensuite, vous pouvez simplement activer / désactiver le profil.
la source