DevOps

Запуск одного теста в Maven: правильный синтаксис

Узнайте, как запустить только один метод теста в Maven Surefire: mvn test -Dtest=MyTest#myMethod. Поддержка JUnit и TestNG.

Как запустить один тестовый метод в Maven? Я знаю, что можно запустить все тесты в классе командой mvn test -Dtest=classname, но синтаксис -Dtest=classname.methodname не работает. Как правильно выполнить только один тестовый метод?

Плагин Maven Surefire ожидает сначала имя класса, затем # и имя метода.
Используйте -Dtest=ClassName#methodName (или кавычки в Windows) для запуска одного тестового метода.


Содержание


Как указать класс и метод

bash
# Указать только класс
mvn test -Dtest=MyTest

# Указать конкретный метод
mvn test -Dtest=MyTest#myMethod
  • Для Windows кавычки обычно нужны:
    mvn test -Dtest="MyTest#myMethod"

  • Если нужно запустить несколько методов того же класса:
    -Dtest=MyTest#methodOne+methodTwo

  • Чтобы исключить методы, используйте - после +:
    -Dtest=MyTest#methodOne+methodTwo-ignoredMethod


Поддерживаемые фреймворки

Фреймворк Поддержка # Комментарии
JUnit 4.x Нативно поддерживается.
TestNG Работает при наличии testng.xml либо без него.
JUnit 5 ✔ (начиная с Surefire 2.22.1) Требует поставки JUnit Platform provider.
Failsafe (интеграционные тесты) Параметр -Dit.test=MyIT#method

Подробнее о JUnit 5 – см. Maven Surefire – Использование JUnit 5 Platform.


Дополнительные варианты запуска

Цель Команда Примечание
Запустить только класс mvn test -Dtest=MyTest Выводит все методы класса.
Запустить класс с шаблоном mvn test -Dtest=*Test Ищет все классы, оканчивающиеся Test.
Запустить несколько классов mvn test -Dtest=FirstTest,SecondTest Классы разделяются запятой.
Запустить по маске пакета mvn test -Dtest=**/MyTest Включает все пакеты.
Фильтровать по аннотации -Dgroups=integration (TestNG) Используется при работе с TestNG.

Проблемы и решения

Проблема Причина Решение
Нет выполненных тестов Параметр -Dtest неверно сформирован Убедитесь, что используете #, а не .
Метод не найден Метод не помечен аннотацией @Test Проверьте аннотацию и имя метода
Ошибка конфликтов версий Старый Surefire (≤ 2.21) Обновите до 2.22.1+
Для JUnit 5 метод не запускается Не подключен JUnit Platform provider Добавьте <provider>org.junit.platform.surefire.provider.JUnitPlatformProvider</provider> в конфигурацию плагина

Заключение

  • Используйте # вместо . для разделения класса и метода.
  • Поддержка: JUnit 4.x, TestNG и JUnit 5 (с Surefire 2.22.1+) работают одинаково.
  • Команды: mvn test -Dtest=MyTest#myMethod – самый простой способ запустить один тест.
  • Если метод не запускается, проверьте имя, аннотацию и версию Surefire.

Источники

  1. Плагин Maven Surefire – Запуск одного теста – официальная документация по синтаксису #.
  2. Baeldung – Запуск одного теста или метода с Maven – практический пример команды.
  3. Stack Overflow – Запуск одного тестового метода с Maven – обсуждение совместимости с разными фреймворками.
  4. Плагин Maven Surefire – Использование JUnit 5 Platform – информация о поддержке JUnit 5.
Авторы
Проверено модерацией
Модерация