Comment exécuter mes tests d’intégration Maven

J’ai un projet multi-module maven2 et dans chacun de mes modules enfants, j’ai des tests JUnit nommés Test.java et Integration.java pour les tests unitaires et les tests d’intégration. Quand j’exécute:

mvn test

tous les tests JUnit *Test.java dans les modules enfants sont exécutés. Quand j’exécute

mvn test -Dtest=**/*Integration

aucun des tests Integration.java n’est exécuté dans les modules enfants.

Celles-ci semblent être exactement la même commande pour moi mais celle avec -Dtest = / * Integration ** ne fonctionne pas, elle affiche 0 tests exécutés au niveau parent, il n’y a pas de tests

    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 d’unité 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:

       org.apache.maven.plugins maven-surefire-plugin   **/*IntegrationTest.java     integration-test  test  integration-test   none   **/*IntegrationTest.java      

    Le cycle de vie de la construction Maven comprend maintenant la phase “test d’intégration” pour l’exécution des tests d’intégration, qui sont exécutés séparément des tests unitaires effectués pendant la phase “test”. Il s’exécute après “package”, donc si vous exécutez “mvn verify”, “mvn install” ou “mvn deploy”, les tests d’intégration seront exécutés en cours de route.

    Par défaut, Integration-Test exécute des classes de test nommées **/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 plug – in Failsafe , la page d’utilisation de Failsafe (pas correctement liée à la page précédente au moment où j’écris ceci) et consultez également cet article de blog Sonatype .

    J’ai fait EXACTEMENT ce que vous voulez faire et ça marche très bien. Les tests unitaires “* Tests” s’exécutent toujours et “* IntegrationTests” ne s’exécutent que lorsque vous effectuez une vérification mvn ou une installation mvn. Ici c’est l’extrait de mon POM. serg10 a presque eu raison …. mais pas tout à fait.

        org.apache.maven.plugins maven-surefire-plugin   true  false    unit-tests test  test    false   **/*Tests.java    **/*IntegrationTests.java     integration-tests integration-test  test    false   **/*IntegrationTests.java      

    Bonne chance!

    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 en séparant les tests unitaires et d’intégration.

    Définir une interface de marqueur

    La première étape du regroupement d’un test utilisant des catégories consiste à créer une interface de marqueur.
    Cette interface sera utilisée pour marquer tous les tests que vous souhaitez exécuter en tant que tests d’intégration.

     public interface IntegrationTest {} 

    Marquez vos classes de test

    Ajoutez l’annotation de la catégorie en haut de votre classe de test. Il prend le nom de votre nouvelle interface.

     import org.junit.experimental.categories.Category; @Category(IntegrationTest.class) public class ExampleIntegrationTest{ @Test public void longRunningServiceTest() throws Exception { } } 

    Configurer les tests d’unité Maven

    La beauté de cette solution est que rien ne change vraiment pour le côté des tests unitaires.
    Nous ajoutons simplement une configuration au plug-in maven surefire pour l’ignorer tous les tests d’intégration.

      org.apache.maven.plugins maven-surefire-plugin 2.11   **/*.class   com.test.annotation.type.IntegrationTest    

    Lorsque vous effectuez un test de nettoyage mvn, seuls vos tests unitaires non marqués seront exécutés.

    Configurer les tests d’intégration Maven

    Encore une fois, la configuration est très simple.
    Nous utilisons le plugin standard de sécurité intégrée et le configurons pour ne lancer que les tests d’intégration.

      org.apache.maven.plugins maven-failsafe-plugin 2.19.1   **/*.class   com.test.annotation.type.IntegrationTest    

    La configuration utilise un objective d’exécution standard pour exécuter le plug-in de sécurité lors de la phase de test d’intégration de la génération.

    Vous pouvez maintenant faire une installation propre mvn
    Cette fois, 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.

    Vous devriez essayer d’utiliser le plugin maven failafe . Vous pouvez lui indiquer d’inclure un certain ensemble de tests.

    Par défaut, Maven exécute uniquement des tests ayant Test quelque part dans le nom de la classe.

    Renommez-le en IntegrationTest et cela fonctionnera probablement.

    Sinon, vous pouvez modifier la configuration de Maven pour inclure ce fichier, mais il est probablement plus simple et plus efficace de nommer vos tests SomethingTest.

    Des inclusions et exclusions des tests :

    Par défaut, le plug-in Surefire inclut automatiquement toutes les classes de test avec les modèles de caractères génériques suivants:

    • “** / Test * .java” – inclut tout son sous-répertoire et tous les noms de fichiers Java commençant par “Test”.
    • “** / * Test.java” – inclut tous ses sous-répertoires et tous les noms de fichiers Java qui se terminent par “Test”.
    • “** / * TestCase.java” – inclut tout son sous-répertoire et tous les noms de fichiers Java se terminant par “TestCase”.

    Si les classes de test ne sont pas conformes à la convention de dénomination, configurez Surefire Plugin et spécifiez les tests à inclure.

    Une autre façon d’exécuter des tests d’intégration avec Maven consiste à utiliser la fonctionnalité de profil:

     ...    org.apache.maven.plugins maven-surefire-plugin   **/*Test.java   **/*IntegrationTest.java        integration-tests    org.apache.maven.plugins maven-surefire-plugin   **/*IntegrationTest.java   **/*StagingIntegrationTest.java        ... 

    L’exécution de ‘mvn clean install’ exécutera la version par défaut. Comme spécifié ci-dessus, les tests d’intégration seront ignorés. L’exécution de ‘tests d’intégration de mvn clean install -P’ inclura les tests d’intégration ( j’ignore également mes tests d’intégration de transfert). 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’ .

    Vous pouvez suivre la documentation maven pour exécuter les tests unitaires avec la génération et exécuter les tests d’intégration séparément.

       true  [...]    org.apache.maven.plugins maven-failsafe-plugin 2.20.1  ${skipTests}     [...]  

    Cela vous permettra d’exécuter tous les tests d’intégration désactivés par défaut. Pour les exécuter, utilisez cette commande:

     mvn install -DskipTests=false