Lassen Sie Maven alle Tests ausführen, auch wenn einige fehlschlagen

243

Ich habe ein Projekt mit mehreren Modulen. Wenn alle Tests bestanden sind, werden sie alle vom Maven-Test ausgeführt.

Wenn die Tests im ersten Modul fehlschlagen, fährt maven nicht mit dem nächsten Projekt fort. Ich habe testFailureIgnore in den Surefire-Einstellungen auf true gesetzt, aber es hilft nicht.

Wie lasse ich Maven alle Tests ausführen?

ripper234
quelle
Welche Version des Maven-Surefire-Plugins?
Pascal Thivent

Antworten:

359

Aus der Maven Embedder-Dokumentation :

-fae, --fail-at-end Scheitern Sie den Build erst danach; Lassen Sie alle nicht betroffenen Builds fortfahren

-fn, --fail-never NIEMALS den Build fehlschlagen, unabhängig vom Projektergebnis

Wenn Sie also ein Modul testen, können Sie es sicher verwenden -fae.

Andernfalls sollten Sie mehrere Module ausführen, wenn Sie mehrere Module haben und alle testen möchten (auch diejenigen, die vom Modul für fehlgeschlagene Tests abhängen) mvn clean install -fn.
-faefährt mit dem Modul fort, bei dem ein Test fehlgeschlagen ist (führt alle anderen Tests aus), aber alle Module, die davon abhängen, werden übersprungen.

Despot
quelle
1
Zusätzlich können Sie -e für das cmd hinzufügen, um einige Fehlerinformationen bereitzustellen.
Despot
11
Ich habe gerade die Option getestet --fail-never. Maven wird den Build auch dann nicht fehlschlagen, wenn Kompilierungsfehler vorliegen. Wenn ich diese Option auf Jenkins verwende, sieht der Build auch dann erfolgreich aus, wenn viele Kompilierungsfehler vorliegen. Ich bevorzuge -Dmaven.test.failure.ignore=truein diesem Fall und lasse Jenkins die todsicheren Berichte analysieren.
Fuemf5
@wlnirvana Ich habe den Beitrag jetzt mit diesem Link bearbeitet (also zögern Sie nicht, Ihren Kommentar zu löschen ...)
Steve Chambers
93

Ich habe gerade den Parameter "-fae" gefunden, der dazu führt, dass Maven alle Tests ausführt und nicht bei einem Fehler stoppt.

ripper234
quelle
3
Leider funktioniert dieser Parameter nicht, wenn ich ihn an TeamCity übergebe.
Ripper234
4
In einem Projekt mit mehreren Modulen werden Module übersprungen, die von einem Modul abhängen, bei dem die Tests fehlgeschlagen sind. Verwenden Sie stattdessen -fn.
Hipokito
2
@ ripper234 Hast du einen Weg gefunden, damit es in TeamCity funktioniert?
Jeredriq Demas
86

Können Sie mit safefire 2.6 testen und entweder safefire mit konfigurieren testFailureIgnore=true. Oder in der Kommandozeile:

mvn install -Dmaven.test.failure.ignore=true
Pascal Thivent
quelle
16
IIRC hat den Effekt, dass der gesamte Build nicht fehlschlägt, anstatt alle Tests auszuführen und am Ende fehlzuschlagen.
Ondra Žižka
1
Dies ist die einzige Option, die für mich funktioniert hat ... Die Option "-fae" hat bei Testfehlern nichts bewirkt
Yoi
38

Versuchen Sie, die folgende Konfiguration für das todsichere Plugin in Ihre pom.xml des Root-Projekts einzufügen :

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <testFailureIgnore>true</testFailureIgnore>
        </configuration>
      </plugin>
    </plugins>
  </build>
  [...]
</project>
Nybon
quelle
17

Eine schnelle Antwort:

mvn -fn test

Funktioniert mit verschachtelten Projekterstellungen.

Rustyx
quelle