201 votes

Empêcher les tests unitaires dans maven mais autoriser les tests d'intégration

J'ai un maven build dans lequel j'utilise le plugin SureFire pour exécuter des tests unitaires, et le de sécurité plugin pour exécuter certains tests d'intégration. Je voudrais un moyen d'exécuter simplement le de sécurité du plugin de tests.

Ce n'est pas une bonne solution pour moi d'ajouter différents profils ou quoi que ce soit dans le pom, parce que c'est un build multimodule et je ne veux pas avoir à modifier chaque module du pom.

Il y a skip.tests et maven.test.skip et skipTests qui s'arrêtent à tous les tests, et skipITs, qui ne s'arrête que le failsafe plugin.

Alors, est-il un indicateur de ligne de commande pour maven comme skipITs, mais plutôt avec la fonctionnalité de "onlyITs"?

210voto

bacar Points 2017

J'ai trouvé la façon la plus simple d'ignorer uniquement infaillible tests est de configurer infaillible (mais pas infaillible) comme suit:

<plugin>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.14</version>
    <configuration>
        <!-- skips surefire tests without skipping failsafe tests.
                 Property value seems to magically default to false -->
        <skipTests>${skip.surefire.tests}</skipTests>
    </configuration>
</plugin>

Cela vous permet d'exécuter mvn verify -Dskip.surefire.tests et seulement infaillible, pas failsafe, des tests seront ignorés; il permet également de faire fonctionner tous les autres phases nécessaires, y compris la pré-intégration et post-intégration, et permet également de faire fonctionner l' verify objectif qui est demandé à fait échouer votre maven build si vos tests d'intégration en échec.

Notez que cette redéfinit la propriété permet de spécifier que les tests doivent être ignorés, donc si vous fournissez les canonique -DskipTests=true, surefire l'ignore, mais failsafe le fera, ce qui peut être inattendu, surtout si vous avez les versions existantes/les utilisateurs en spécifiant que le drapeau. Une solution simple semble être de défaut skip.surefire.tests de la valeur de skipTests votre <properties> de la section de la pom:

<properties>
    <skip.surefire.tests>${skipTests}</skip.surefire.tests>
</properties>

Si vous avez besoin, vous pouvez fournir un comme paramètre appelé skip.failsafe.tests pour le failsafe, cependant, je n'ai pas trouvé nécessaire - parce que les tests unitaires à l'habitude de courir dans une phase antérieure, et si je veux exécuter des tests unitaires, mais pas les tests d'intégration, je voudrais exécuter l' test de phase au lieu de l' verify de phase. Votre expérience peut varier!

Ces skip.(surefire|failsafe).tests propriétés devrait probablement être intégré dans surefire/failsafe code lui-même, mais je ne suis pas sûr combien il serait en violation de la "ils sont exactement le même plugin, sauf pour 1 petite différence" ethos.

133voto

Sean Patrick Floyd Points 109428

Une solution de contournement serait d'appeler:

 mvn clean test-compile failsafe:integration-test
 

Certes, c'est moche, mais cela peut résoudre votre problème.


Ou (un autre hack):

 mvn clean integration-test -Dtest=SomePatternThatDoesntMatchAnything -DfailIfNoTests=false
 

Référence:

32voto

Kati Holasz Points 11

J'espère que cela t'aides!

Essayez d’exécuter le test uniquement avec FailSafe (plugin pour integration-test - il ne vous permettra d’exécuter que des tests d’intégration portant ce nom, par défaut: * / IT .java, ** / IT.java, * /*ITCase.java ;, mais vous pouvez facilement changer cela du fichier pom)

 mvn failsafe:integration-test
 

Et lorsque vous souhaitez utiliser uniquement SureFire (plug-in pour le test unitaire)

 mvn surefire:test
 

ou un test à la fois avec:

 mvn -Dtest=MyUnitlTest
 

15voto

user1964939 Points 20

Je fais comme ça alors toutes les phases sont normalement exécutées:

  mvn -Dtest=foo -DfailIfNoTests=false verify
 

-2voto

Steven Points 1922

Essayez d'exécuter vos tests d'intégration ou unitaires dans un profil distinct. Ensuite, vous pouvez simplement activer / désactiver le profil.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X