Vorrei saltare un solo test durante l'avvio di mvn install
.C'è un modo per saltare solo un singolo test in Maven?
C'è un modo per farlo?
Vorrei saltare un solo test durante l'avvio di mvn install
.C'è un modo per saltare solo un singolo test in Maven?
C'è un modo per farlo?
Con junit 4, aggiungo un'annotazione @Ignore
quando voglio farlo. Questo funzionerebbe per te, a meno che tu non voglia solo a volte ignorare il test, o solo ignorarlo quando la build viene eseguita da Maven. Se questo è il caso, allora chiederei "Perché?"
Prove dovrebbero essere coerenti, essi dovrebbero essere portatili, e dovrebbero sempre passare. Se un test specifico è problematico, prenderei in considerazione la possibilità di riscriverlo, rimuoverlo interamente o spostarlo in una diversa suite o progetto di test.
Il caso d'uso è che qualcuno nel mio team sta attualmente aggiustando un test e voglio lanciare tutti gli altri test ma non questo fino a quando non funziona di nuovo . Quindi hai ragione, dovrei disattivarlo tramite codice temporaneo. – paulgreg
Anche questo funziona a livello di classe. Ho un test di base e la configurazione pom è immutabile (è in un pom padre condiviso), quindi Maven fallisce i miei test perché dice "no test" nella classe astratta. Questa è una grande soluzione. – ashes999
Ciò significa che devi modificare/confermare per invertire la modifica. Lo stesso vale per la prossima soluzione: – jasonnerothin
Penso che questo dovrebbe funzionare se si usa questo comando:
mvn archetype:create -DgroupId=test -DartifactId=test
(per il cambiamento di test pom.xml e la prova di classe al seguente e utilizzare mvn installare)
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");
}
}
Dai un'occhiata alla this solution, utilizzando @Category
annotazioni
public class AccountTest {
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeSomeTime() {
...
}
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeEvenLonger() {
...
}
@Test
public void thisOneIsRealFast() {
...
}
}
che poi esegue utilizzando una suite di test:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses({ AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}
È possibile specificare la categoria sulla riga di comando di Maven/senza toccare il codice? –
E 'normale che i test di integrazione devono essere esclusi, ma i test di unità devono essere inclusi Per raggiungere questo obiettivo suggerisco di nominare tutti i test di integrazione con un IntegrationTest postfix (ad esempio AbcIntegrationTest.java).
e poi nel vostro costruire esperto di inserire il seguente:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
Quando si genera con questo tutti i test di integrazione wil essere esclusi, ma tutti gli altri test (test di unità, ad esempio) è gestita. Perfetto :-)
Per maggiori informazioni su exclusing e compresi i test durante l'esecuzione del test, leggere
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
PS ha dovuto escludere un singolo test è sufficiente nominare esplicitamente nella lista escludere. Facile.
È possibile specificare un motivo di esclusione sull'opzione -Dtest
aggiungendo il prefisso a !
(punto esclamativo). Per esempio,
mvn -Dtest=\!FlakyTest* install
giudicata in here e verificato funzionare. Per esempio., Sono stato in grado di saltare this prova Jenkins traballante utilizzando:
mvn -Dtest=\!CronTabTest* package
Questa funzione è stata implementata in 2.19, consultare [la documentazione] (http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html#Multiple_Formats_in_One). – rdvdijk
C'è un modo per combinare include ed esclude? Per esempio. Potrei voler eseguire Cron * Test ad eccezione di CronFlakyTest. Ho provato 'mvn -Dtest =" \! CronFlakyTest, Cron * Test "install' ma questo esegue ancora il test a fiocchi –
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html – Vadzim
Se stai usando il plugin failsafe: 'mvn clean install -Dit.test = \! TestToSkip. *' –