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
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.
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
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
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:
Prendre plaisir!
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.