JavaRush /Курсы /JSP & Servlets /Тестирование Maven-проекта во время сборки

Тестирование Maven-проекта во время сборки

JSP & Servlets
2 уровень , 3 лекция
Открыта

Тестирование в Maven

Еще один важный момент работы Maven – это фаза тестирования. Она выполнится, если ты запустишь фазу test, package, verify или любую другую, которая идет после них.

По умолчанию Maven запустит все тесты, которые находятся в папке src/test/java/. Чтобы отличить тесты, которые нужно запустить, от других java-файлов, было принято соглашение имен. Тестами считаются java-классы, чьи имена начинаются с “Test” и заканчивается на “Test” или “TestCase”.

Общий шаблон имен тестов:

  • **/Test*.java
  • **/*Test.java
  • **/*TestCase.java

Данные тесты должны быть написаны на основе тестового фреймворка Junit или TestNG. Это очень крутые фреймворки, о них мы обязательно поговорим немного позднее.

Результаты тестирования в виде отчетов в форматах .txt и .xml сохраняются в директории ${basedir}/target/surefire-reports.

Настройка тестирования

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

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
    	<version>2.12.4</version>
    	<configuration>
        	<includes>
                <include>Sample.java</include>
        	</includes>
    	</configuration>
	</plugin>
</plugins>

В примере мы указали плагину, что ему нужно запустить единственный тестовый класс – Sample.java.

Как быстро исключить поломанные тесты

Чтобы запустить проект на тестирование, нужно выполнить команду mvn test. Но чаще возникает потребность исключить из тестирования некоторые тесты. Например, они могут быть поломаны, выполняться слишком долго, или по любым другим причинам.

Во-первых, можно просто сказать Maven пропустить тесты при выполнении фазы сборки. Пример:

mvn clean package -Dmaven.test.skip=true

Во-вторых, в конфигурации плагина можно отключить выполнение тестов:


<configuration>
    <skipTests>true</skipTests>
</configuration>

Ну и в-третьих, тесты можно исключить с помощью тега <exclude>. Пример:


<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
    	<version>2.12.4</version>
    	<configuration>
        	<excludes> <exclude>**/TestFirst.java</exclude> <exclude>**/TestSecond.java</exclude> </excludes>
    	</configuration>
    </plugin>
</plugins>
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Павел Уровень 111 Expert
22 сентября 2023
...было принято соглашение имен. Тестами считаются java-классы, чьи имена начинаются с “Test” и заканчивается на “Test” или “TestCase”. И тут же: В примере мы указали плагину, что ему нужно запустить единственный тестовый класс – Sample.java.
Pan Roman Уровень 32
22 мая 2024
Ну в целом всё верно. Потому и указали принудительно, что автоматически он цепляет только по соглашению.
Dmitry Tolstov Уровень 7
17 июля 2023
Пока что непонятно для чего нужны тестовые классы и что они выполняют. Хотелось бы примера. Описано только общее понятее, как и где они должны быть записаны и что есть некоторые настройки и плагин к ним.
Samandar Уровень 62
4 февраля 2025
Когда ты собираешь проект в Maven, тестирование проверяет, что код работает правильно. Если тесты не пройдены, сборка останавливается. Это нужно, чтобы: ✅ Избежать ошибок в коде – если что-то сломалось, тест покажет, где именно. ✅ Автоматически проверять код – не надо вручную проверять каждую функцию. ✅ Защитить старый код – если ты изменил что-то, тесты подскажут, не сломалось ли что-то старое.
Samandar Уровень 62
4 февраля 2025
Простой пример теста в Maven 1. Код, который мы тестируем (Calculator.java) public class Calculator { public int add(int a, int b) { return a + b; } } 2. Тест для этого класса (CalculatorTest.java) Файл должен быть в src/test/java: import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; public class CalculatorTest { @Test void testAddition() { Calculator calc = new Calculator(); assertEquals(5, calc.add(2, 3), "2 + 3 должно быть 5"); } } Что здесь происходит? Создается объект Calculator. Метод add(2, 3) должен вернуть 5. assertEquals(5, calc.add(2, 3)) проверяет, действительно ли получилось 5. Что будет, если тест провалится? Допустим, в коде add() есть ошибка: public int add(int a, int b) { return a - b; // Ошибка: вместо сложения стоит вычитание } Если ты запустишь mvn test, тест выдаст ошибку: Expected: 5 But was: -1 Maven остановит сборку, пока ты не исправишь ошибку.
p3rsonal Уровень 35
30 ноября 2022
Короче будет написать просто -DskipTests, чем -Dmaven.test.skip=true
Jinxman Уровень 19
26 февраля 2023
Это разные ключи, -DskipTests не запускает тесты, но все равно собирает их, -Dmaven.test.skip=true пропускает даже фазу сборки тестов. На больших проектах/слабых машинах разница будет заметной.