1. Введение
Пропускать тесты часто бывает плохой идеей. Однако есть ситуации, когда это может быть полезно — например, когда мы разрабатываем новый код и хотим запустить промежуточные сборки, в которых тесты не проходят или не компилируются.
Только в таких ситуациях мы можем пропустить тесты, чтобы избежать накладных расходов на их компиляцию и запуск. Конечно, учтите, что невыполнение тестов может привести к неправильным методам написания кода.
В этом кратком руководстве мы рассмотрим все возможные команды и параметры для пропуска тестов с помощью Maven .
2. Жизненный цикл Мавена
Прежде чем вдаваться в подробности того, как пропускать тесты, мы должны понять, когда тесты компилируются или запускаются . В статье о целях и этапах Maven мы углубимся в концепцию жизненного цикла Maven, но для целей этой статьи важно знать, что Maven может:
- Игнорировать тесты
- Компиляция тестов
- Запустить тесты
В наших примерах мы будем использовать этап пакета
, который включает в себя компиляцию и запуск тестов. Параметры, рассматриваемые в этом руководстве, относятся к подключаемому модулю Maven Surefire .
3. Использование флагов командной строки
3.1. Пропуск тестовой компиляции
Во-первых, давайте рассмотрим пример теста, который не компилируется:
@Test
public void thisDoesntCompile() {
foreach;
}
Когда мы запускаем команду командной строки:
mvn package
Мы получим ошибку:
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /Users/foreach/skip-tests/src/test/java/com/antmordel/skiptests/PowServiceTest.java:[11,9] not a statement
[INFO] 1 error
Поэтому давайте рассмотрим, как пропустить фазу компиляции исходников теста. В Maven мы можем использовать флаг maven.test.skip
:
mvn -Dmaven.test.skip package
В результате исходники тестов не компилируются и, следовательно, не выполняются.
3.2. Пропуск выполнения теста
В качестве второго варианта давайте посмотрим, как мы можем скомпилировать тестовую папку, но пропустить процесс запуска . Это полезно для тех случаев, когда мы не меняем сигнатуру методов или классов, но мы изменили бизнес-логику и в результате сломали тесты. Давайте рассмотрим надуманный тестовый пример, подобный приведенному ниже, который всегда будет давать сбой:
@Test
public void thisTestFails() {
fail("This is a failed test case");
}
Поскольку мы включили оператор fail()
, если мы запустим фазу пакета
, сборка завершится ошибкой:
[ERROR] Failures:
[ERROR] PowServiceTest.thisTestFails:16 This is a failed test case
[INFO]
[ERROR] Tests run: 2, Failures: 1, Errors: 0, Skipped: 0
Давайте представим, что мы хотим пропустить запуск тестов, но все же хотим их скомпилировать. В этом случае мы можем использовать флаг -DskipTests
:
mvn -DskipTests package
и этап пакета завершится успешно. Также в Maven есть специальный плагин для запуска интеграционных тестов, который называется maven failsafe plugin . -DskipTests пропустит выполнение как модульных тестов (надежных), так и интеграционных тестов (отказоустойчивых) .
Чтобы просто пропустить интеграционные тесты, мы можем передать системное свойство -DskipITs .
Наконец, стоит упомянуть, что устаревший флаг -Dmaven.test.skip.exec
также компилирует тестовые классы, но не запускает их.
4. Использование конфигурации Maven
В случае, если нам нужно исключить компиляцию или запуск тестов в течение более длительного периода времени, мы можем изменить файл pom.xml
, чтобы включить правильную конфигурацию.
4.1. Пропуск тестовой компиляции
Как и в предыдущем разделе, давайте рассмотрим, как избежать компиляции тестовой папки. В этом случае мы будем использовать файл pom.xml
. Добавим следующее свойство:
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
Имейте в виду, что мы можем переопределить это значение, добавив противоположный флаг в командную строку :
mvn -Dmaven.test.skip=false package
4.2. Пропуск выполнения теста
Опять же, в качестве второго шага, давайте рассмотрим, как мы можем создать тестовую папку, но пропустить выполнение теста, используя конфигурацию Maven. Для этого нам нужно настроить плагин Maven Surefire со свойством:
<properties>
<tests.skip>true</tests.skip>
</properties>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>${tests.skip}</skipTests>
</configuration>
</plugin>
Свойство Maven testings.skip
— это пользовательское свойство, которое мы определили ранее. Поэтому мы можем переопределить его, если хотим выполнить тесты:
mvn -Dtests.skip=false package
4. Вывод
В этом кратком руководстве мы рассмотрели все альтернативы, которые предлагает Maven, чтобы пропустить компиляцию и/или запуск тестов.
Мы рассмотрели параметры командной строки Maven и параметры конфигурации Maven.