Vous pouvez les séparer très facilement en utilisant JUnit catégories et Maven.
Ceci est montré très, très brièvement ci-dessous par le fractionnement des tests unitaires et d'intégration.
Définir Un Marqueur De L'Interface
La première étape dans le regroupement d'un test à l'aide de catégories est de créer une interface marqueur.
Cette interface sera utilisée pour marquer tous les tests que vous souhaitez exécuter en tant qu'tests d'intégration.
public interface IntegrationTest {}
Marquez vos classes de test
Ajouter la catégorie d'annotation vers le haut de votre classe de test. Elle 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 Maven Tests Unitaires
La beauté de cette solution est que rien ne change vraiment pour le test de l'unité côté des choses.
Nous avons simplement ajouter un peu de configuration pour le maven plugin surefire pour se rendre à ignorer les tests d'intégration.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
<excludedGroups>com.test.annotation.type.IntegrationTest</excludedGroups>
</configuration>
</plugin>
Lorsque vous faites un mvn clean tester votre banalisée tests unitaires d'exécution.
Configurer Maven Tests D'Intégration
De nouveau cette configuration est très simple.
Pour exécuter les tests d'intégration, utilisez ceci:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.11</version>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>2.12</version>
</dependency>
</dependencies>
<configuration>
<groups>com.test.annotation.type.IntegrationTest</groups>
</configuration>
</plugin>
Si vous mettez cela dans un profil avec l'id IT
, vous pouvez exécuter les tests rapides en utilisant mvn clean install
. Pour exécuter simplement l'intégration/lent tests, utilisez mvn clean install -P IT
.
Mais le plus souvent, vous voulez exécuter les tests rapides par défaut et tous les tests avec -P IT
. Si c'est le cas, alors vous devez utiliser un truc:
<profiles>
<profile>
<id>IT</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>java.io.Serializable</excludedGroups> <!-- An empty element doesn't overwrite, so I'm using an interface here which no one will ever use -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Comme vous pouvez le voir, je suis à l'exclusion des tests qui sont annotés avec java.io.Serializable
. Cela est nécessaire parce que le profil sera hériter de la configuration par défaut du plugin Surefire, de sorte que même si vous dites <excludedGroups/>
ou <excludedGroups></excludedGroups>
, la valeur com.test.annotation.type.IntegrationTest
sera utilisé.
Vous aussi vous ne pouvez pas utiliser none
car c'est une interface sur le chemin de la classe (Maven va vérifier cela).
Notes:
- La dépendance à l'
surefire-junit47
n'est nécessaire que lorsque Maven ne pas passer à la JUnit 4 runner automatiquement. À l'aide de l' groups
ou excludedGroups
élément doit déclencher l'interrupteur. Voir ici.
- La plupart du code ci-dessus a été prise à partir de la documentation pour le Maven Failsafe plugin. Voir la section "Utilisation de JUnit Catégories" sur cette page.
- Au cours de mes tests, j'ai trouvé que cela fonctionne même lorsque vous utilisez
@RunWith()
des annotations pour exécuter des suites de Printemps ou à base de tests.