Bauen Sie ein Glas mit Maven auf und ignorieren Sie die Testergebnisse

Baue ein Glas mit Maven und ignoriere die Testergebnisse

1. Einführung

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 Komponententests automatisch aus. there are rare cases when the tests can be skipped and we need to build the project regardless of the test results.

2. Das Projekt aufbauen

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 Sie eine JAR-Datei, indem Sie den folgenden Maven-Befehl ausführen:

mvn package

Dies führt zum Kompilieren der Quellen und zum Generieren einermaven-0.0.1-SNAPSHOT.jar-Datei 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 Befehlmvn package erneut auszuführen, schlägt der Build fehl und die Datei maven-0.0.1-SNAPSHOT.jar wird nicht erstellt.

Dies bedeutetif we have a failing test in our application, we can’t provide an executable file unless we fix the 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

Führen Sie den Befehlmvn package -Dmaven.test.skip=trueaus und sehen Sie sich die Ergebnisse an:

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

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

Führen Sie nun den Befehlmvn 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 der Bestätigung fehl, aber der Build ist erfolgreich.

Lassen Sie uns abschließend die Optionen-fn,-fae testen. Die Befehlepackage -fn undpackage -fae erstellen die Dateijar und erzeugen die Ausgabe vonBUILD SUCCESS, unabhängig davon, ob der Test vonwhenMessageAssigned_thenItIsNotNull()fehlschlägt.

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

4. Maven Surefire Plugin

Eine weitere bequeme Möglichkeit, unser Ziel zu erreichen, ist die Verwendung des Surefire-Plugins von Maven.

Eine erweiterte Übersicht über das Surefire-Plugin finden Sie unterthis article.

To ignore test fails we can simply set the testFailureIgnore property to true:


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

Sehen wir uns nun die Ausgabe des Befehlspackagean:

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

Aus der Ausgabe der laufenden Tests können wir ersehen, dass die KlasseTestFailfehlschlä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.

Abhängig von unserem Bedarf können wir die Tests überhaupt überspringen. Dafür können wir die ZeiletestFailureIgnoreersetzen durch:

true

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

5. Fazit

In this article, we learned how to build our project with Maven regardless of the test results. Wir gingen die praktischen Beispiele durch, bei denen die fehlgeschlagenen Tests übersprungen oder die Erstellung der Tests vollständig ausgeschlossen wurden.

Wie üblich ist der vollständige Code für diesen Artikel inover on GitHub project verfügbar.