Ich möchte nur einen einzigen Test beim Start mvn install
überspringen.Gibt es eine Möglichkeit, nur einen einzigen Test in maven zu überspringen?
Gibt es eine Möglichkeit, das zu tun?
Ich möchte nur einen einzigen Test beim Start mvn install
überspringen.Gibt es eine Möglichkeit, nur einen einzigen Test in maven zu überspringen?
Gibt es eine Möglichkeit, das zu tun?
Mit Junit 4 füge ich eine @Ignore
Annotation hinzu, wenn ich das tun möchte. Dies würde für Sie funktionieren, es sei denn, Sie möchten den Test nur gelegentlich ignorieren oder ignorieren ihn nur, wenn der Build von maven ausgeführt wird. Wenn dies der Fall ist, würde ich fragen: "Warum?"
Tests konsistent sein sollten, sie sollten tragbar sein, und sie sollten immer passieren. Wenn ein spezifischer Test problematisch ist, würde ich erwägen, ihn neu zu schreiben, ihn vollständig zu entfernen oder ihn in eine andere Testsuite oder ein anderes Projekt zu verschieben.
Der Anwendungsfall ist, dass jemand in meinem Team gerade einen Test festlegt und ich alle anderen Tests starten möchte, aber nicht diesen, bis es wieder funktioniert . Du hast also recht, ich sollte es per Code vorübergehend deaktivieren. – paulgreg
Dies funktioniert auch auf Klassenebene. Ich habe einen Basistest und die Pom-Konfiguration ist nicht änderbar (es ist in einem gemeinsamen Eltern Pom), so dass Maven meine Tests fehlschlägt, weil es "keine Tests" in der abstrakten Klasse sagt. Dies ist eine großartige Lösung. – ashes999
Dies bedeutet, dass Sie bearbeiten müssen, um die Änderung rückgängig zu machen. Gleiches gilt für die nächste Lösung: – jasonnerothin
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 die folgende 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");
}
}
Werfen Sie einen Blick auf this solution, 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 eine Testsuite ausgeführt werden:
@RunWith(Categories.class)
@IncludeCategory(SlowTests.class)
@SuiteClasses({ AccountTest.class, ClientTest.class })
public class LongRunningTestSuite {}
Ist es möglich, die Kategorie in der maven-Befehlszeile anzugeben/ohne den Code zu berühren? –
Es ist normal, dass Integrationstests ausgeschlossen werden müssen, aber Unit-Tests müssen enthalten sein. Um dies zu erreichen, empfehle ich, alle Integrationstests mit einem Postfix IntegrationTest (z. B. AbcIntegrationTest.java) zu benennen.
und dann in Ihrem Maven Build setzen folgendes:
<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 ausgeschlossen werden wil, aber alle anderen Tests (Unit-Test zum Beispiel) ausgeführt werden. Perfekt :-)
Für weitere Informationen über exclusing und einschließlich Tests während des Testlaufs, lesen
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html
PS mit einem einzigen Test Um exlude müssen Sie einfach es explizit in der Liste ausschließen nennen. Einfach.
Sie können ein Ausschlussmuster für die Option -Dtest
angeben, indem Sie ihm ein !
(Ausrufezeichen) voranstellen. Z. B.
mvn -Dtest=\!FlakyTest* install
es in here gefunden und verifiziert zu arbeiten. Z.B.Konnte ich this flockig Jenkins Test überspringen, indem Sie:
mvn -Dtest=\!CronTabTest* package
Dieses Feature wurde in 2.19 implementiert, siehe [die Dokumentation] (http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html#Multiple_Formats_in_One). – rdvdijk
Gibt es eine Möglichkeit, Einschließen und Ausschließen zu kombinieren? Z.B. Ich möchte Cron * Test außer CronFlakyTest ausführen. Ich habe versucht 'mvn -Dtest =" \! CronFlakyTest, Cron * Test "installieren", aber das läuft immer noch den flockigen Test –
http://maven.apache.org/surefire/maven-surefire-plugin/examples/inclusion-exclusion.html – Vadzim
Wenn Sie mit das failsafe-plugin: 'mvn clean install -Dit.test = \! TestToSkip. *' –