Как запустить один тестовый метод в 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.
Источники
- Плагин Maven Surefire – Запуск одного теста – официальная документация по синтаксису
#. - Baeldung – Запуск одного теста или метода с Maven – практический пример команды.
- Stack Overflow – Запуск одного тестового метода с Maven – обсуждение совместимости с разными фреймворками.
- Плагин Maven Surefire – Использование JUnit 5 Platform – информация о поддержке JUnit 5.