C'è un modo per saltare un solo test in Maven?
Domanda
Vorrei saltare solo un singolo test durante l'avvio di mvn install
.
C'è un modo per farlo?
Soluzione
Con junit 4, aggiungo un'annotazione @Ignore
quando voglio farlo. Questo funzionerebbe per te, a meno che tu non voglia ignorare a volte solo il test o ignorarlo solo quando la build viene eseguita da maven. In tal caso, chiederei a " Why? & Quot;
I test dovrebbero essere coerenti, dovrebbero essere portatili e dovrebbero passare sempre. Se un test specifico è problematico, prenderei in considerazione la possibilità di riscriverlo, rimuoverlo completamente o spostarlo in una diversa suite o progetto di test.
Altri suggerimenti
È possibile specificare un modello di esclusione sull'opzione -Dtest
prefissandolo con un !
(punto esclamativo). Per es.,
mvn -Dtest=\!FlakyTest* install
Trovato in qui e verificato che funziona. Ad esempio, sono stato in grado di saltare questo test di Jenkins traballante utilizzando:
mvn -Dtest=\!CronTabTest* package
È normale che i test di integrazione debbano essere esclusi, ma i test unitari devono essere inclusi. A tal fine, suggerisco di nominare tutti i test di integrazione con un Postfix IntegrationTest (ad es. AbcIntegrationTest.java).
e quindi nella tua build maven inserisci quanto segue:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
Quando compili con questo, verranno esclusi tutti i test di integrazione, ma vengono eseguiti tutti gli altri test (ad esempio Unit test). Perfetto :-)
Per ulteriori informazioni sull'esclusione e l'inclusione dei test durante l'esecuzione del test, leggere
http://maven.apache.org/ infallibile / maven-surefire-plugin / examples / inclusione-exclusion.html
PS Per escludere un singolo test devi semplicemente nominarlo esplicitamente nell'elenco di esclusione. Facile.
Dai un'occhiata a questa soluzione , usando @Category
annotazioni
public class AccountTest {
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeSomeTime() {
...
}
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeEvenLonger() {
...
}
@Test
public void thisOneIsRealFast() {
...
}
}
Che quindi esegui usando una suite di test:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}
Puoi anche includere ( gruppi
) / exclude ( excludedGroups
) quei test con maven usando ad esempio:
mvn -DexcludedGroups=com.mycompany.tests.IntegrationTests test
Penso che dovrebbe funzionare se si utilizza questo comando:
mvn archetype:create -DgroupId=test -DartifactId=test
(per test cambia pom.xml e la classe test in quanto segue e usa 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>
test-classe:
package test;
import org.junit.Test;
import static org.junit.Assert.fail;
public class AppTest
{
@Test
public void test_it() {
fail("not implemented");
}
}
Se si desidera utilizzare l'interfaccia della riga di comando per escludere un singolo test, è necessario utilizzare i flag -Dtest
e -Dit.test
.
Fare attenzione a ripristinare i valori predefiniti. Quando si utilizza la notazione !
, tutte le impostazioni predefinite vengono cancellate e è necessario ripristinarle. Per i normali test eseguiti da surefire
è necessario aggiungere * Test, Test *, * Test, * TestCase
, mentre per i test di integrazione eseguiti da fail-safe
dovrebbe aggiungere IT *, * IT, * ITCase
.
Puoi trovare maggiori informazioni qui https: / /maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html (test normali)
e qui https: //maven.apache .org / surefire / maven-failafe-plugin / esempi / inclusione-esclusione.html (test di integrazione)
-Dit.test = '! ITsometestIT, IT *, * IT, * ITCase'
Un comando completo mvn
potrebbe essere questo:
mvn -e -B -Dtest = '! unitTestABC, * Test, Test *, * Test, * TestCase' -Dit.test = '! ITintegrationTestABCIT, IT *, * IT, * ITCase' -DfailIfNoTests = installazione falsa e pulita
Ricorda di usare '
e NON "
. Quando si usano le virgolette doppie, qualsiasi !
al loro interno verrà valutato da bash
.
Ricorda anche che i test di integrazione non vengono eseguiti quando mvn test
. Con mvn verifica
verranno eseguiti solo test di integrazione e non test unitari