web-dev-qa-db-fra.com

Printemps maven - exécute des tests spécifiques (via annotations ou profil maven)

En utilisant un contexte Spring maven, je voudrais exécuter des tests spécifiques basés sur un profil maven. Je voudrais avoir un moyen facile de marquer les groupes de test. Si possible, j'aimerais utiliser les annotations. Quelles options existent, comme les paramètres de ligne de commande maven, la spécification de profils maven, etc. 

Disons que j'ai les tests suivants: 

Exemple: 

// annotation("integration")
public class GeopointFormatterTest {
    @Test
    public void testIntegration1() {  ...  }   
    @Test
    public void testIntegration2() {  ...  }

Des annotations telles que @Profile (pour la création de beans) et @ActiveProfile (pour la sélection de profils spécifiques pour la création de beans) ne peuvent naturellement pas être utilisées pour la sélection de tests. Tous les tests ne sont exécutés que pour les déclarations suivantes: 

mvn clean install -Pdevelopment 

mvn clean install -Pdevelopment -Dspring.profiles.active = acceptation 

mvn clean install -Pdevelopment -Dspring.profiles.active = intégration

Comme suggéré, j'ai aussi utilisé @IfProfileValue. C'est un bon moyen de sélectionner des tests en fonction des valeurs des propriétés du système. Les valeurs de propriété système peuvent être remplacées par une classe CustomProfileValueSource, comme dans: @ProfileValueSourceConfiguration (CustomProfileValueSource.class)

EDIT et ALTERNATIVE

Les GRANDES réponses ci-dessous concernent le mécanisme @Category de JUnit. Merci à tous!

Une approche différente consiste à suivre ces étapes: [1] définissez une propriété dans un profil maven et [2] utilisez cette propriété pour ignorer les tests via le plug-in de test standard surefire. 

[1] Définition des propriétés via un profil: 

<profiles>
    <profile>
        <id>integrationtests</id>
        <properties>
            <integration.skip>false</integration.skip>
            <acceptance.skip>true</acceptance.skip>
        </properties>
    </profile>
    ... other profiles

[2] Utilisation des propriétés du plugin surefire test pour ignorer les tests. 

<build>
   <plugins>
      <plugin>
         <!-- Run the integration test-->
         <groupId>org.Apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <version>${surefire.plugin.version}</version>
         <configuration>
            <skipTests>${acceptance.skip}</skipTests>

Démarrer dans maven: mvn clean install –Pintegrationtests

12
tjm1706

Jetez un coup d'oeil à catégories junit .

Vous souhaitez étiqueter vos tests avec des annotations de catégories spécifiques

public interface FastTests { /* category marker */ }
public interface SlowTests { /* category marker */ }

@Category(SlowTests.class)
public class A {
    @Test public void a() {}
}

puis formez une suite comme 

@RunWith(Categories.class)
@IncludeCategory({FastTests.class})
@SuiteClasses({A.class, B.class})
public static class FastTestSuite {
     //
}

Et puis le lancer avec 

mvn -Dtest=FastTestSuite test

Notez également que si vous ne souhaitez pas spécifier manuellement vos classes de cas de test d'unité dans la classe de suite, vous pouvez également utiliser l'aide de ClasspathSuite puis limiter uniquement en fonction des catégories.

12
eis

Vous devrez probablement classer vos tests à l'aide de l'annotation @Category. Un exemple complet a été fourni dans la documentation Surefire fournie ici - recherchez la chaîne Utilisation de JUnit Categories .

En supposant que vous ayez catégorisé vos tests en conséquence, vous pourrez maintenant configurer un ou plusieurs profils dans votre build Maven qui déclencheront ces tests selon la catégorie.

<profiles>
    <profile>
        <id>slow-tests</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.11</version>
                    <configuration>
                        <groups>com.mycompany.SlowTests</groups>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>fast-tests</id>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.11</version>
                    <configuration>
                        <groups>com.mycompany.FastTests</groups>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Vous pouvez spécifier un ou plusieurs profils sur la ligne de commande lors de l'exécution des tests.

mvn test -Pslow-tests,fast-tests
1
Srikanth Anusuri

Nous avons résolu la catégorisation de Junit au cours des étapes suivantes.

J'ai créé un projet pour vous dans github. https://github.com/djaganathan/unit-test-samples

Mise en garde: - Les packages de catégorisation Junit sont encore à titre expérimental.

1) Création d'une catégorie d'interfaces



    /**
     * This interface used to categories Junit Test
     * those Tests will be executed during bamboo build run
     */
    public interface ReleaseTest {
    }

2) Balisé les tests unitaires avec la catégorie souhaitée



    import org.junit.Test;
    import org.junit.experimental.categories.Category;
    import org.junit.internal.runners.JUnit4ClassRunner;
    import org.junit.runner.RunWith;

    import com.github.djaganathan.unit.test.category.ReleaseTest;

    @RunWith(JUnit4ClassRunner.class)
    public class GeneralTest {

        @Test
        @Category(value={ReleaseTest.class})
        public void doTestForRelease(){}

        @Test
        public void doTestForDev(){}

    }

3) Créer un profil dans Maven et y attacher

4) Exécutez la commande en tant que mvn test -PreleaseTest

1
Dhana

Sur la base des réponses d’un certain nombre de messages, j’ai créé un projet de test simple qui illustre un certain nombre de fonctionnalités de test de qualité du code: 

  • Réalisation des tests unitaires OR tests d'intégration avec plugins Surefire et Failsafe .
  • Améliorer la qualité du code via le plugin findbugs .
  • Déterminez les statistiques de couverture de test avec le plugin Jacoco

Prendre plaisir!

0
tjm1706

Vous pouvez spécifier le profil avec cet indicateur:

mvn test -Dspring.profiles.active=acceptance

Dans mon dernier projet, j'ai un profil "d'intégration" que j'utilise pour exécuter les tests d'intégration sur une base de données H2 intégrée. 

0
db80