пятница, 25 сентября 2015 г.

Как продебажить Maven проект на фазе тестов

Подход 1.

Запускаем в проекте:

$ mvn -Dmaven.surefire.debug test
Процесс Mojo запуститься, для тестов он запустит отдельных процесс, который будет выполняться паралельно, паралельный процесс запустится на порту 5005, и остановится ожидая подключения дебагера на этот порт.
Теперь мы можем из IDE подключиться удаленным подключением к этому порту по протоколу  jdwp.


Подход 2.

Все то же самое, но отключаем создание второго потока под тесты. Зачем это может быть нужно? Может потому что если настроить на несколько потоков, то на свободных потоках будут запускаться несколько тестов одновременно, после того как мы подключимся приложение остановится только там где стоят точки останова, все остальные тесты могут в фоне повыполняться, пока мы дебажим один тест, и мы уже вспомнив о другом должны будем все перезапускать сначала?

$ mvn -Dmaven.surefire.debug -DforkCount=0 test
Так мы знаем что ничего другого в фоне не выполняется.

Подход 3.
Иногда нужно изменить порт, или что-то другое в настройках дебага, для этого указываем параметры передаваемые jvm при запуске(java [параметры]) явно:
$ mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test

Либо чтобы не писать много буков каждый раз при перезапуске, так:

$ export MAVEN_OPTS=-Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE"
$ mvn test
Так в текущей сессии терминала мы можем не указывать maven.surefire.debug параметр.

Подход 4.
Отдебажить только один тестовый класс:
$ mvn -Dtest=MySuperClassTest -Dmaven.surefire.debug test

Подход 5.
Можно с версии 2.0.8 сократить количетсво букв, чтобы не указывать maven.surefire.debug,  так:
$ mvnDebug -DforkCount=0 test

В результате этих манипуляций jvm запустит наш jar проекта и будет ожидать удаленного подключения.

Комментариев нет:

Отправить комментарий