Domanda

Vorrei saltare solo un singolo test durante l'avvio di mvn install .

C'è un modo per farlo?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top