Zmuszenie Maven do uruchomienia wszystkich testów, nawet jeśli niektóre zawiodą

243

Mam projekt z kilkoma modułami. Po przejściu wszystkich testów test Maven uruchamia je wszystkie.

Gdy testy nie powiodą się w pierwszym module, maven nie przejdzie do następnego projektu. Mam testFailureIgnore ustawiony na true w ustawieniach Surefire, ale to nie pomaga.

Jak zmusić maven do uruchomienia wszystkich testów?

ripper234
źródło
Jaka wersja wtyczki maven-surefire?
Pascal Thivent

Odpowiedzi:

359

Z dokumentacji Osadnika Maven :

-fae, --fail-at-end Niepowodzenie kompilacji później; zezwól na kontynuowanie wszystkich kompilacji, których nie dotyczy zmiana

-fn, --fail-never NIGDY nie zawiedź kompilacji, niezależnie od wyniku projektu

Więc jeśli testujesz jeden moduł, to możesz go bezpiecznie używać -fae.

W przeciwnym razie, jeśli masz wiele modułów i chcesz je wszystkie przetestować (nawet te, które zależą od modułu testów zakończonych niepowodzeniem), powinieneś uruchomić mvn clean install -fn.
-faeprzejdzie do modułu, który nie przeszedł pomyślnie testu (uruchomi wszystkie inne testy), ale wszystkie moduły, które od niego zależą, zostaną pominięte.

despota
źródło
1
dodatkowo możesz dodać -e dla cmd, aby podać informacje o błędach.
despot
11
Właśnie przetestowałem tę opcję --fail-never. Maven nie zawiedzie kompilacji, nawet jeśli wystąpią błędy kompilacji. Jeśli użyję tej opcji w Jenkins, kompilacja wygląda na udaną, nawet jeśli zawiera wiele błędów kompilacji. -Dmaven.test.failure.ignore=trueW tym przypadku wolę i pozwól Jenkinsowi przeanalizować raporty dotyczące pożarów.
fuemf5,
@wlnirvana Edytowałem post teraz z tym linkiem (więc nie krępuj się usunąć komentarza ...)
Steve Chambers
93

Właśnie znalazłem parametr „-fae”, który powoduje, że Maven uruchamia wszystkie testy i nie zatrzymuje się po awarii.

ripper234
źródło
3
Niestety ten parametr nie działa, gdy przekazuję go do TeamCity.
ripper234,
4
W projekcie wielomodułowym moduły zależne od modułu, który nie przeszedł pomyślnie testów, zostaną pominięte. Zamiast tego użyj opcji -fn.
hipokito
2
@ ripper234 czy znalazłeś sposób, aby działał na TeamCity?
Jeredriq Demas
86

Czy możesz przetestować za pomocą surefire 2.6 i albo skonfigurować surefire za pomocą testFailureIgnore=true. Lub w wierszu poleceń:

mvn install -Dmaven.test.failure.ignore=true
Pascal Thivent
źródło
16
IIRC powoduje to, że cała kompilacja nie zawiedzie, zamiast uruchamiać wszystkie testy i kończyć się niepowodzeniem.
Ondra Žižka
1
To jedyna opcja, która zadziałała dla mnie ... Opcja „-fae” nic nie zrobiła w przypadku niepowodzenia testów
Yoi
38

Spróbuj dodać następującą konfigurację wtyczki surefire do pom.xml projektu root :

<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
źródło
17

Szybka odpowiedź:

mvn -fn test

Działa z zagnieżdżonymi kompilacjami projektów.

rustyx
źródło