Überspringen von Tests mit Maven

1. Einleitung

Das Überspringen von Tests ist oft eine schlechte Idee. Es gibt jedoch Situationen, in denen dies nützlich sein kann - möglicherweise, wenn wir neuen Code entwickeln und Zwischen-Builds ausführen möchten, in denen die Tests nicht bestanden oder kompiliert werden.

Nur in solchen Situationen können wir die Tests überspringen, um den Aufwand für das Kompilieren und Ausführen zu vermeiden. Bedenken Sie natürlich, dass das Nichtausführen von Tests zu schlechten Codierungspraktiken führen kann.

In diesem kurzen Tutorial werden alle möglichen Befehle und Optionen zum Überspringen von Tests mit Maven erläutert .

2. Maven-Lebenszyklus

Bevor wir uns mit den Details zum Überspringen von Tests befassen , müssen wir wissen, wann Tests kompiliert oder ausgeführt werden . In dem Artikel über Maven-Ziele und -Phasen gehen wir tiefer in das Konzept des Maven-Lebenszyklus ein, aber für den Zweck dieses Artikels ist es wichtig zu wissen, dass Maven:

  1. Tests ignorieren
  2. Tests kompilieren
  3. Führen Sie Tests durch

In unseren Beispielen verwenden wir die Paketphase , die das Kompilieren und Ausführen der Tests umfasst. Die in diesem Tutorial untersuchten Optionen gehören zum Maven Surefire Plugin.

3. Verwenden von Befehlszeilen-Flags

3.1. Überspringen der Testzusammenstellung

Schauen wir uns zunächst ein Beispiel für einen Test an, der nicht kompiliert werden kann:

@Test public void thisDoesntCompile() { baeldung; }

Wenn wir den Befehlszeilenbefehl ausführen:

mvn package

Wir werden eine Fehlermeldung erhalten:

[INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /Users/baeldung/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement [INFO] 1 error

Lassen Sie uns daher untersuchen, wie Sie die Kompilierungsphase für die Testquellen überspringen können. In Maven können wir das Flag maven.test.skip verwenden:

mvn -Dmaven.test.skip package

Infolgedessen werden die Testquellen nicht kompiliert und daher nicht ausgeführt.

3.2. Überspringen der Testausführung

Als zweite Option wollen wir sehen, wie wir den Testordner kompilieren können, aber den Ausführungsprozess überspringen . Dies ist nützlich in Fällen, in denen wir die Signatur der Methoden oder Klassen nicht ändern, aber die Geschäftslogik geändert haben. Infolgedessen haben wir die Tests abgebrochen. Betrachten wir einen erfundenen Testfall wie den folgenden, der immer fehlschlägt:

@Test public void thisTestFails() { fail("This is a failed test case"); }

Da wir die Anweisung fail () eingefügt haben, schlägt der Build beim Ausführen der Paketphase mit dem Fehler fehl:

[ERROR] Failures: [ERROR] PowServiceTest.thisTestFails:16 This is a failed test case [INFO] [ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0

Stellen wir uns vor, wir möchten die Ausführung der Tests überspringen, sie aber trotzdem kompilieren. In diesem Fall können wir das Flag -DskipTests verwenden:

mvn -DskipTests package

und die Paketphase wird erfolgreich sein. Außerdem gibt es in Maven ein spezielles Plugin zum Ausführen von Integrationstests, das als Maven Failsafe Plugin bezeichnet wird. Die -DskipTests überspringen die Ausführung von Unit-Tests (todsicher) und Integrationstests (ausfallsicher). Um nur die Integrationstests zu überspringen, können wir die Systemeigenschaft -DskipITs übergeben .

Schließlich ist es erwähnenswert, dass das jetzt veraltete Flag -Dmaven.test.skip.exec auch die Testklassen kompiliert, sie jedoch nicht ausführt .

4. Verwenden der Maven-Konfiguration

Für den Fall, dass wir das Kompilieren oder Ausführen der Tests für einen längeren Zeitraum ausschließen müssen, können wir die Datei pom.xml ändern , um die richtige Konfiguration einzuschließen.

4.1. Überspringen der Testzusammenstellung

Lassen Sie uns wie im vorherigen Abschnitt untersuchen, wie wir das Kompilieren des Testordners vermeiden können . In diesem Fall verwenden wir die Datei pom.xml . Fügen wir die folgende Eigenschaft hinzu:

 true 

Beachten Sie, dass wir diesen Wert überschreiben können, indem wir das entgegengesetzte Flag in der Befehlszeile hinzufügen :

mvn -Dmaven.test.skip=false package

4.2. Überspringen der Testausführung

Lassen Sie uns als zweiten Schritt noch einmal untersuchen, wie wir den Testordner erstellen können, aber die Testausführung mithilfe der Maven-Konfiguration überspringen . Dazu müssen wir das Maven Surefire Plugin mit einer Eigenschaft konfigurieren:

 true   org.apache.maven.plugins maven-surefire-plugin 2.22.1  ${tests.skip}  

Die Maven-Eigenschaft tests.skip ist eine benutzerdefinierte Eigenschaft, die wir zuvor definiert haben. Daher können wir es überschreiben, wenn wir die Tests ausführen möchten:

mvn -Dtests.skip=false package

4. Fazit

In diesem kurzen Tutorial haben wir alle Alternativen untersucht, die Maven anbietet, um das Kompilieren und / oder Ausführen der Tests zu überspringen.

Wir haben die Maven-Befehlszeilenoptionen und die Maven-Konfigurationsoptionen durchgesehen.