Gibt es eine Möglichkeit nur einen einzigen Test in Maven zu überspringen?
Frage
Ich möchte nur einen einzigen Test überspringen, während mvn install
starten.
Gibt es eine Möglichkeit, das zu tun?
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