Заставить Maven запустить все тесты, даже если некоторые из них не пройдены

243

У меня есть проект с несколькими модулями. Когда все тесты пройдены, тест Maven запускает их все.

Когда тесты не пройдены в первом модуле, maven не перейдет к следующему проекту. У меня для testFailureIgnore установлено значение true в настройках Surefire, но это не помогает.

Как заставить maven запускать все тесты?

ripper234
источник
Какая версия maven-surefire-plugin?
Паскаль Thivent

Ответы:

359

Из документации Maven Embedder :

-fae, --fail-at-end Только провалить сборку потом; разрешить продолжение всех незатронутых сборок

-fn, --fail-never НИКОГДА не проваливать сборку, независимо от результата проекта

Так что, если вы тестируете один модуль, вы можете безопасно его использовать -fae.

В противном случае, если у вас есть несколько модулей, и если вы хотите, чтобы все они были протестированы (даже те, которые зависят от сбойного модуля тестов), вы должны запустить mvn clean install -fn.
-faeпродолжит работу с модулем, который прошел неудачный тест (запустит все остальные тесты), но все зависящие от него модули будут пропущены.

деспот
источник
1
Кроме того, вы можете добавить -e для cmd для предоставления информации об ошибке.
Деспот
11
Я только что проверил вариант --fail-never. Maven не завершит сборку, даже если будут ошибки компиляции. Если я использую эту опцию в Jenkins, сборка выглядит успешной, даже если в ней много ошибок компиляции. Я предпочитаю -Dmaven.test.failure.ignore=trueв этом случае, и пусть Дженкинс проанализирует достоверные отчеты.
fuemf5
@wlnirvana Я редактировал пост сейчас с этой ссылкой (так что не стесняйтесь удалить свой комментарий ...)
Стив Чамберс
93

Я только что нашел параметр "-fae", который заставляет Maven запускать все тесты и не останавливаться при сбое.

ripper234
источник
3
К сожалению, этот параметр не работает, когда я передаю его в TeamCity.
ripper234
4
В многомодульном проекте модули, которые зависят от модуля, который не прошел тестирование, будут пропущены. Вместо этого используйте -fn.
hipokito
2
@ ripper234 Вы нашли способ заставить его работать в TeamCity?
Jeredriq Demas
86

Можете ли вы протестировать с верным 2.6 и настроить верный с testFailureIgnore=true. Или в командной строке:

mvn install -Dmaven.test.failure.ignore=true
Паскаль Тивент
источник
16
IIRC это приводит к тому, что вся сборка не дает сбоя, вместо того, чтобы запускать все тесты и, в конце концов, давать сбой.
Ондра Жижка
1
Это единственный вариант, который работал для меня ... Опция "-fae" ничего не делала при неудачных
тестах
38

Попробуйте добавить следующую конфигурацию для плагина surefire в ваш pom.xml корневого проекта :

<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
источник
17

Быстрый ответ:

mvn -fn test

Работает с вложенными сборками проектов.

rustyx
источник