Как пропустить все интеграционные тесты (-DskipITs) и один модульный тест Командная строка mvn - PullRequest
0 голосов
/ 15 февраля 2019

Я относительно новичок в Maven.Я провел много исследований и копаний на эту тему, но, похоже, не могу найти ответ, поэтому подумал, что задам вопрос здесь.

Цель: Я бы хотелзапустить mvn clean install test при пропуске интеграционных тестов, а также одного конкретного класса модульных тестов.

Я пробовал следующее:

mvn clean install -DskipITs -Dtest=!MyTestClass test

mvn clean install -DskipITs&&test=!MyTestClass test

mvn clean install -DskipITs&test=!MyTestClass test

Однако ни одна из вышеперечисленных команд не работает.Первая команда из трех приведенных выше имела для меня наибольшее значение, но кажется, что при использовании этой команды выполняются интеграционные тесты.Здесь мои знания и понимание Maven имеют пробел;Я не уверен, является ли это ожидаемым поведением или это подходящий способ передачи нескольких свойств в командной строке?

Когда я запускаю эту команду: mvn clean install -DskipITs test, интеграционные тесты успешно пропускаются.

Я знаком с жизненным циклом сборки Maven, но возможно, что я что-то неправильно понимаю или упускаю детали.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Для меня работала следующая команда:

mvn clean install -DskipITs "-Dtest=!MyTestClass, !**/*IT.java" test

Я все еще изучаю Java, но вот что я думаю произошло в моем случае.

Есть два плагина, относящихся к тестированию в Java (вероятно, их гораздо больше, но эти два имеют отношение к моей проблеме): один называется «maven-failsafe-plugin», а другой - «maven-surefire-plugin».Как отметили @hovanessyan и другие, maven-failsafe-plugin обычно запускает интеграционные тесты, в то время как maven-surefire-plugin обычно запускает модульные тесты ( ссылка на Maven docs ).

В моем случаеКогда я запускаю команду mvn clean install -DskipITs -Dtest=!MyTestClass test, при дальнейшем копании в журналах интеграционные тесты не пройдут, и я получу следующее дополнительное скрытое сообщение об ошибке:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test)

Интеграционные тесты для проектанаходится в каталоге с именем integrationtests и названы в соответствии с соглашением «MyIntegrationTestIT.java».Что в итоге привело меня на правильный путь, так это: Документы Surefire .Эти документы описывают «тестовый» аргумент, который вы можете передать с помощью команды Maven.

Мне кажется, что, когда я передал аргумент -Dtest=!MyTestClass, это как если бы он дал плагину Surefire команду «не делать».запустите MyTestClass, но запустите любой другой тестовый файл. "Между тем, аргумент -DskipITs дал указание плагину Failsafe пропускать интеграционные тесты (что он делал все время).Когда я явно вызвал тестовые файлы, которые я не не хотел запускать, в форме "-Dtest=!MyTestClass, !**/*IT.java", Surefire точно понял, что я хотел сделать.Плагин Surefire выполнял все тесты, за исключением MyTestClass и интеграционных тестов, а плагин Failsafe пропускал интеграционные тесты.

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

Наконец, это очень помогло при отладке для запуска команды mvn help:effective-pom и передачи -X вместе с моей командой mvn clean install test.

0 голосов
/ 15 февраля 2019

Интеграционные тесты с maven обычно запускаются с помощью maven-failsafe-plugin

Чтобы этот плагин пропустил интеграционные тесты (убедитесь, что имена ваших интеграционных тестовых классов соответствуют соглашению * IT.java, в противном случае вам нужновключив их в <inclusions>), вы можете сделать это в конфигурации плагина или из командной строки ( официальный документ ):

mvn test -DskipITs

Отдельные тесты можно пропустить с помощью:

mvn test -Dtest=!MyTestClass

Так что это должно работать:

mvn clean install -DskipITs -Dtest=!MyTestClass
...