2009-05-07 17 views

risposta

18

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.

+5

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

+0

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

+1

Ciò significa che devi modificare/confermare per invertire la modifica. Lo stesso vale per la prossima soluzione: – jasonnerothin

4

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"); 
    } 
} 
5

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 {} 
+0

È possibile specificare la categoria sulla riga di comando di Maven/senza toccare il codice? –

4

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.

26

È 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 
+1

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

+0

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 –

Problemi correlati