Bauen Sie mit Maven ein Glas und ignorieren Sie die Testergebnisse

1. Einleitung

Diese Kurzanleitung zeigt, wie Sie mit Maven ein Glas bauen, während Sie die Testergebnisse ignorieren.

Standardmäßig führt Maven beim Erstellen des Projekts automatisch Komponententests durch. Es gibt jedoch seltene Fälle, in denen die Tests übersprungen werden können und wir das Projekt unabhängig von den Testergebnissen erstellen müssen.

2. Erstellen Sie das Projekt

Erstellen wir ein einfaches Projekt, in das wir auch einen kleinen Testfall aufnehmen:

public class TestFail { @Test public void whenMessageAssigned_thenItIsNotNull() { String message = "hello there"; assertNotNull(message); } }

Erstellen wir eine JAR-Datei, indem wir den folgenden Maven-Befehl ausführen:

mvn package

Dies führt zum Kompilieren der Quellen und zum Generieren einer Datei maven-0.0.1-SNAPSHOT.jar im Verzeichnis / target.

Lassen Sie uns nun den Test ein wenig ändern, damit der Test fehlschlägt.

@Test public void whenMessageAssigned_thenItIsNotNull() { String message = null; assertNotNull(message); }

Wenn wir diesmal versuchen, den Befehl mvn package erneut auszuführen, schlägt der Build fehl und die Datei maven-0.0.1-SNAPSHOT.jar wird nicht erstellt.

Dies bedeutet, dass wir bei einem fehlgeschlagenen Test in unserer Anwendung keine ausführbare Datei bereitstellen können, es sei denn, wir beheben den Test.

Wie können wir dieses Problem lösen?

3. Maven Argumente

Maven hat seine eigenen Argumente, um dieses Problem zu lösen:

  • -Dmaven.test.failure.ignore = true ignoriert alle Fehler, die während der Testausführung auftreten
  • -Dmaven.test.skip = true würde die Tests nicht kompilieren
  • -fn , -fae schlägt den Build unabhängig von den Testergebnissen nie fehl

Lassen Sie uns den Befehl mvn package -Dmaven.test.skip = true ausführen und die Ergebnisse sehen:

[INFO] Tests are skipped. [INFO] BUILD SUCCESS

Dies bedeutet, dass das Projekt erstellt wird, ohne die Tests zu kompilieren.

Führen Sie nun den Befehl mvn package -Dmaven.test.failure.ignore = true aus :

[INFO] Running testfail.TestFail [ERROR] whenMessageAssigned_thenItIsNotNull java.lang.AssertionError [INFO] BUILD SUCCESS

Unser Komponententest schlägt bei Bestätigung fehl, aber der Build ist erfolgreich.

Lassen Sie uns abschließend die Optionen -fn , -fae testen . Sowohl die Befehle package -fn als auch package -fae erstellen die JAR- Datei und erzeugen die Ausgabe BUILD SUCCESS, unabhängig davon, wann der Test MessageAssigned_thenItIsNotNull () fehlschlägt.

Im Falle des Multi-Modul-Projekts sollte die Option -fn verwendet werden. -fae fährt mit dem Modul fort, bei dem ein Test fehlgeschlagen ist, überspringt jedoch alle abhängigen Module.

4. Maven Surefire Plugin

Ein weiterer bequemer Weg, um unser Ziel zu erreichen, ist die Verwendung des Surefire-Plugins von Maven.

Eine erweiterte Übersicht über das Surefire-Plugin finden Sie in diesem Artikel.

Um Testfehler zu ignorieren, können wir einfach die testFailureIgnore- Eigenschaft auf true setzen :

 maven-surefire-plugin ${maven.surefire.version}   TestFail.java  true  

Lassen Sie uns nun die Ausgabe des Paketbefehls sehen :

[INFO] T E S T S [INFO] Running testfail.TestFail [ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, <<< FAILURE! - in testfail.TestFail

An der Ausgabe der laufenden Tests können wir erkennen, dass die TestFail- Klasse fehlschlägt. Wenn wir jedoch weiter schauen, sehen wir, dass die BUILD SUCCESS-Nachricht ebenfalls vorhanden ist und die Datei maven-0.0.1-SNAPSHOT.jar kompiliert wird.

Je nach Bedarf können wir die Ausführung der Tests überhaupt überspringen. Dafür können wir die testFailureIgnore- Zeile ersetzen durch:

true

Oder setzen Sie das Kommandozeilenargument -DskipTests . Dadurch werden die Testklassen kompiliert, die Testausführung wird jedoch vollständig übersprungen.

5. Schlussfolgerung

In diesem Artikel haben wir gelernt, wie wir unser Projekt mit Maven unabhängig von den Testergebnissen erstellen . Wir haben die praktischen Beispiele für das Überspringen der fehlgeschlagenen Tests oder das vollständige Ausschließen der Zusammenstellung der Tests durchgearbeitet.

Wie üblich ist der vollständige Code für diesen Artikel im GitHub-Projekt verfügbar.