Перейти к основному содержимому

Создайте банку с Maven и игнорируйте результаты теста

· 3 мин. чтения

1. Введение

В этом кратком руководстве показано, как создать банку с помощью Maven, игнорируя результаты теста.

По умолчанию Maven автоматически запускает модульные тесты при сборке проекта. Однако бывают редкие случаи, когда тесты можно пропустить и нужно собирать проект вне зависимости от результатов тестов.

2. Создание проекта

Давайте создадим простой проект, в который мы также включим небольшой тестовый пример:

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

Давайте создадим файл jar, выполнив следующую команду Maven:

mvn package

Это приведет к компиляции исходников и созданию файла maven-0.0.1-SNAPSHOT.jar в каталоге /target.

Теперь давайте немного изменим тест, чтобы он начал давать сбои.

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

На этот раз, когда мы снова пытаемся запустить команду mvn package , происходит сбой сборки и файл maven-0.0.1-SNAPSHOT.jar не создается.

Это означает, что если в нашем приложении есть неудачный тест, мы не можем предоставить исполняемый файл, пока не исправим тест.

Итак, как мы можем решить эту проблему?

3. Аргументы Знатока

У Maven есть свои аргументы для решения этой проблемы:

  • -Dmaven.test.failure.ignore=true игнорирует любой сбой, возникающий во время выполнения теста .
  • -Dmaven.test.skip=true не будет компилировать тесты
  • -fn , -fae никогда не приводит к сбою сборки независимо от результатов тестирования

Запустим команду mvn package -Dmaven.test.skip=true и посмотрим на результаты:

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

Это означает, что проект будет собран без компиляции тестов.

Теперь запустим команду mvn package -Dmaven.test.failure.ignore=true :

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

Наш модульный тест терпит неудачу при утверждении, но сборка проходит успешно.

Наконец, давайте проверим опции -fn , -fae . Обе команды package -fn и package -fae создают файл jar и выдают вывод BUILD SUCCESS независимо от того , когда тест whenMessageAssigned_thenItIsNotNull() завершается сбоем.

В случае многомодульного проекта следует использовать опцию -fn . -fae продолжает работу с модулем, который не прошел тест, но пропускает все зависимые модули.

4. Плагин Maven Surefire

Еще один удобный способ достичь нашей цели — использовать плагин Maven Surefire.

Расширенный обзор подключаемого модуля Surefire см. в этой статье .

Чтобы игнорировать сбои теста, мы можем просто установить для свойства testFailureIgnore значение true :

<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven.surefire.version}</version>
<configuration>
<includes>
<include>TestFail.java</include>
</includes>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>

Теперь давайте посмотрим на вывод команды package :

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

Из вывода запущенных тестов мы видим, что класс TestFail дает сбой. Но глядя дальше, мы видим, что сообщение BUILD SUCCESS тоже есть и файл maven-0.0.1-SNAPSHOT.jar скомпилирован.

В зависимости от нашей потребности, мы можем вообще не запускать тесты. Для этого мы можем заменить строку testFailureIgnore на:

<skipTests>true</skipTests>

Или задайте аргумент командной строки -DskipTests . Это скомпилирует тестовые классы, но полностью пропустит выполнение теста.

5. Вывод

В этой статье мы узнали, как собрать свой проект с помощью Maven вне зависимости от результатов тестирования . Мы рассмотрели практические примеры пропуска неудачных тестов или полного исключения компиляции тестов.

Как обычно, полный код для этой статьи доступен в проекте GitHub .