J'aimerais ne sauter qu'un seul test lors du lancement de mvn install
.
Y-a-t-il un moyen de faire ça ?
Avec Junit 4, j'ajoute une annotation @Ignore
lorsque je souhaite le faire. Cela fonctionnerait pour vous, à moins que vous ne vouliez parfois ignorer le test, ou seulement lorsque le build est exécuté à partir de maven. Si tel est le cas, je demanderais alors "Pourquoi?"
Les tests devraient devraient être cohérents, ils devraient être portables, et ils devraient passer toujours. Si un test spécifique est problématique, je pourrais envisager de le réécrire, de le supprimer complètement ou de le déplacer vers une suite de tests ou un projet différent.
Vous pouvez spécifier un modèle d'exclusion pour l'option -Dtest
en le préfixant d'un !
(point d'exclamation). Par exemple.,
mvn -Dtest=\!FlakyTest* install
Je l'ai trouvé dans ici et il a été vérifié qu'il fonctionne. Par exemple, j'ai pu passer ce test floconneux de Jenkins en utilisant:
mvn -Dtest=\!CronTabTest* package
Il est normal d'exclure les tests d'intégration mais d'inclure les tests unitaires ..__ Pour ce faire, je suggère de nommer tous les tests d'intégration avec un IntegrationTest postfixé (par exemple AbcIntegrationTest.Java).
et ensuite dans votre maven build mettez ce qui suit:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.Java</exclude>
</excludes>
</configuration>
</plugin>
Lorsque vous compilez avec cela, tous les tests d'intégration sont exclus, mais tous les autres tests (test unitaire, par exemple) sont exécutés. Parfait :-)
Pour plus d’informations sur l’exclusion et l’inclusion des tests lors de l’exécution du test, lisez
http://maven.Apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
PS Pour exclure un seul test, vous devez simplement le nommer explicitement dans la liste d'exclusion. Facile.
Regardez cette solution , en utilisant les annotations @Category
public class AccountTest {
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeSomeTime() {
...
}
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeEvenLonger() {
...
}
@Test
public void thisOneIsRealFast() {
...
}
}
Que vous exécutez ensuite en utilisant une suite de tests:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}
je pense que cela devrait fonctionner si vous utilisez cette commande:
mvn archetype:create -DgroupId=test -DartifactId=test
(pour changer les tests pom.xml et test-class comme suit et utiliser mvn install)
pom.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>test</name>
<url>http://maven.Apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>
test/AppTest.Java
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
</dependencies>
classe de test:
package test;
import org.junit.Test;
import static org.junit.Assert.fail;
public class AppTest
{
@Test
public void test_it() {
fail("not implemented");
}
}
Si vous souhaitez utiliser la CLI pour exclure un seul test, vous devez utiliser les indicateurs -Dtest
et -Dit.test
.
Veillez à réinitialiser les valeurs par défaut. Lorsque vous utilisez la notation !
, toutes les valeurs par défaut sont effacées et vous devez les rétablir. Pour les tests normaux exécutés par surefire
, vous devez ajouter *Test, Test*, *Tests, *TestCase
, tandis que pour les tests d'intégration exécutés par failsafe
, vous devez ajouter IT*, *IT, *ITCase
.
Vous pouvez trouver plus d'informations ici https://maven.Apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html (tests normaux)
et ici https://maven.Apache.org/surefire/maven-failsafe-plugin/examples/inclusion-exclusion.html (tests d'intégration)
-Dit.test='!ITsometestIT, IT*, *IT, *ITCase'
Une commande complète mvn
pourrait être celle-ci:
mvn -e -B -Dtest='!unitTestABC, *Test, Test*, *Tests, *TestCase' -Dit.test='!ITintegrationTestABCIT, IT*, *IT, *ITCase' -DfailIfNoTests=false clean install
N'oubliez pas d'utiliser '
et NOT "
. Lorsque vous utilisez des guillemets, tout !
à l'intérieur sera évalué par bash
.
Rappelez-vous également que les tests d'intégration ne sont pas exécutés lorsque mvn test
. Avec mvn verify
, seuls les tests d'intégration seront exécutés et non les tests unitaires.