Наш блог

Полезная информация для клиентов

Maven и автоматические тесты

7 августа - Разработка ПО

Если Вы разрабатываете на Java, то наверняка знакомы с Maven. Если нет, то можете не пропускать вводную часть.
 
Для программистов на .NET отмечу, что Maven чем-то похож на NuGet, но гораздо богаче по функционалу.
 
Итак, в двух словах, Maven - это инструмент для управления инфраструктурой проекта. Каждый модуль имеет свою xml-конфигурацию, в которой прописывается его имя, версия, родительский проект, внутрипроектные и внешние зависимости от других модулей, профили сборки (build profiles) и прочее.
 
Далее, простая команда "mvn clean install", запущенная из консоли в папке проекта/модуля, скачивает в локальный репозиторий все зависимости, компилирует и собирает внутрипроектные зависимости, и кладёт собранный модуль, опять-таки, в локальный репозиторий.
 
Ключевое отличие от NuGet здесь - то, что репозиторий является "локально-глобальным" и используется при сборке вообще всех проектов. Хотя никто не мешает вручную определить отдельный репозиторий для каждого проекта/модуля.
 
Вообще говоря, Maven поддерживает много команд, завязанных на Maven Project Lifecycle. Которые, в том числе, можно переопределять, создавать самостоятельно и так далее. Подробнее можно почитать тут.
 
Я чаще всего использую "mvn clean install", который сначала "чистит" проект, а потом компилирует и кладёт в локальный репозиторий, либо "mvn package", который создаёт target модуля (например, готовый .jar или .war).
Помимо прочего, обе команды также автоматически компилируют и запускают все тесты, находящиеся в модуле.
 
И вот тут мы, собственно, заканчиваем введение и подходим к сути поста. 
 
Иногда, - здесь опытные программисты начинают ухмыляться, - автоматические тесты (в том числе юнит-тесты) устаревают, приходят в негодность, в общем, - перестают работать. Иногда. rofl
 
Зачастую не очень опытные пользователи Maven начинают недоумевать: как же так, моя IDE чихать хотела на то, что тесты неадекватны, а вот Maven, гад такой, отказывается собирать проект, если тесты не в идеальном порядке. Ишь, радетель за чистоту кода! mosking
 
Конечно, одним из решений является радикальное уничтожение неработающих тестов, и оно, как мы все знаем, таки иногда применяется. Но есть и другой подход, позволяющий отложить проблему "до лучших времён". Не исключено, что в будущем она также будет решена радикально, но, по крайней мере, мы не совершаем необратимых действий прямо сейчас.
 
Дело в том, что у Maven есть два опциональных ключа, позволяющих НЕ проверять тесты. Ну, мы уже понимаем, что в большинстве случаев эти ключи сами собой становятся обязательными, да? blush
 
Итак, первый:

-DskipTests=true

- компилирует тесты, но не запускает их.
 
Второй:
-Dmaven.test.skip-true
- НЕ компилирует тесты и не запускает их.
 
Например:
mvn clean install -DskipTests=true
Вуаля, проект очищается, собирается, и кладётся в репозиторий, несмотря на то, что в тестах - хаос, анархия, разброд и шатание. То, что доктор прописал! 
 
Use, как говорится, at your own risk. vava

Николай Пасько

Survive, succeed and ascend

(c) Godsmen faction @ Planescape: Torment

Ваш комментарий очень важен для нас