Frage

Ich möchte nur einen einzigen Test überspringen, während mvn install starten.

Gibt es eine Möglichkeit, das zu tun?

War es hilfreich?

Lösung

Mit JUnit 4, füge ich eine @Ignore Anmerkung, wenn ich das tun will. Dies würde für Sie arbeiten, es sei denn, Sie manchmal nur ignorieren, den Test zu wollen, oder es nur ignorieren, wenn der Build von Maven läuft. Wenn dies der Fall ist, dann würde ich fragen: „Warum?“

Tests sollte in Einklang stehen, sie sollte tragbar sein, und sie sollte immer passieren. Wenn ein bestimmte Test problematisch ist, würde ich prüfen, Umschreiben ihm, das Entfernen es ganz, oder es zu einer anderen Testsuite oder ein Projekt zu bewegen.

Andere Tipps

Sie können ein Ausschlussmuster angeben Option -Dtest indem sie sie mit einem ! (Ausrufezeichen) vorangestellt wird. Z.B.

mvn -Dtest=\!FlakyTest* install

Gefunden es in hier und überprüft zu arbeiten. Z. B. konnte ich diese flockig Jenkins Test unter Verwendung von:

mvn -Dtest=\!CronTabTest* package

Es ist normal, dass Integrationstests ausgeschlossen werden müssen, aber Unit-Tests müssen einbezogen werden. Um dies zu erreichen ich Namensgebung vorschlagen alle Integrationstests mit einem Postfix IntegrationTest (z AbcIntegrationTest.java).

und dann in Ihre Maven Build setzen die folgenden:

  <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>**/*IntegrationTest.java</exclude>
                </excludes>
            </configuration>
        </plugin>

Wenn Sie mit diesem alle Integrationstests bauen wil ausgeschlossen werden, sondern auch alle anderen Tests (Unit-Test zum Beispiel) ausgeführt werden. Perfect: -)

Für weitere Informationen über exclusing und einschließlich Tests während des Testlaufs, lesen

http://maven.apache.org/ todsichere / maven-todsichere-Plugin / examples / Aufnahme-exclusion.html

PS mit einem einzigen Test Um exlude Sie müssen einfach es explizit in der Liste ausschließen nennen. Leicht.

Haben Sie einen Blick auf diese Lösung , mit @Category Anmerkungen

public class AccountTest {

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeSomeTime() {
        ...
    }

    @Test
    @Category(IntegrationTests.class)
    public void thisTestWillTakeEvenLonger() {
        ...
    }

    @Test
    public void thisOneIsRealFast() {
        ...
    }
}

, die Sie dann führen Sie eine Testsuite mit:

@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}

Sie können auch (groups) / ausschließen (excludedGroups) diese Prüfungen mit Maven für exemple mit:

mvn -DexcludedGroups=com.mycompany.tests.IntegrationTests test

Ich denke, das sollte funktionieren, wenn Sie diesen Befehl verwenden:

mvn archetype:create -DgroupId=test -DartifactId=test

(für Test Änderung pom.xml und Test-Klasse auf den folgenden und verwenden 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-Klasse:

package test;
import org.junit.Test;
import static org.junit.Assert.fail;
public class AppTest 
{
    @Test
    public void test_it() {
        fail("not implemented");
    }
}

Wenn Sie die CLI verwenden, um einen einzigen Test auszuschließen, sollten Sie die -Dtest und -Dit.test Flags verwenden.

Achten Sie darauf, die Standardeinstellungen zurückgesetzt werden. Wenn Sie die ! Notation verwenden alle Standardwerte werden gelöscht und Sie sollten sie zurückstellen. Für normale durch surefire geführten Tests sollten Sie *Test, Test*, *Tests, *TestCase hinzufügen, während für durch failsafe ausgeführt Integrationstests sollten Sie IT*, *IT, *ITCase hinzufügen.

Sie können mehr Informationen finden Sie hier: https: / /maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html (normale Tests)

und hier https: //maven.apache .org / todsichere / maven-Fail-safe-Plugin / examples / Aufnahme-exclusion.html (Integrationstests)

-Dit.test='!ITsometestIT, IT*, *IT, *ITCase'

Ein vollständiger mvn Befehl dieses sein könnte:

mvn -e -B -Dtest='!unitTestABC, *Test, Test*, *Tests, *TestCase' -Dit.test='!ITintegrationTestABCIT, IT*, *IT, *ITCase' -DfailIfNoTests=false clean install

Denken Sie daran, ' und NICHT " zu verwenden. Wenn doppelte Anführungszeichen verwendet, wird jede ! in ihnen durch bash ausgewertet werden.

Denken Sie auch daran, dass die Integrationstests ausgeführt werden, nicht wenn mvn test. Mit mvn verify nur werden Integrationstests laufen und nicht Unit-Tests

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top