MySQL Maven Plugin

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Я использовал MySQL в нескольких Java веб-проектах и обнаружил, что не существует плагина Maven, который помог бы мне тестировать мои DAO против реального сервера MySQL. Существует множество механизмов для имитации слоя хранения базы данных как в памяти, так и на диске. Однако, всегда хорошо убедиться, что ваши классы протестированы на идентичной базе данных, которую у вас есть в производственной среде.

Я создал собственный плагин Maven, jcabi-mysql-maven-plugin, который делает ровно две вещи: запускает сервер MySQL на фазе pre-integration-test и выключает его на фазе post-integration-test.

Вот как вы его конфигурируете в pom.xml (см. также полные инструкции по использованию):

Выше настроены два плагина. Давайте посмотрим, что делает каждый из них.

  1. maven-dependency-plugin загружает дистрибутив MySQL в zip-архиве (довольно большой файл, более 300 Мб для Linux) и распаковывает его. В этом архиве содержатся те же файлы, которые вы бы использовали для традиционной установки MySQL. После распаковки архива он готов начать обслуживать SQL-запросы как обычный сервер MySQL.

  2. jcabi-mysql-maven-plugin запускает сервер, привязывая его к случайно выбранному порту TCP. Основная задача моего плагина Maven - убедиться, что сервер MySQL запускается правильно на каждой платформе (Mac OS, Linux, Windows) и останавливается, когда он больше не нужен. Все остальное делается самим распространением MySQL.

  3. maven-failsafe-plugin запускает модульные тесты на этапе integration-test. Его основное отличие от maven-surefire-plugin заключается в том, что он не прерывает сборку, когда некоторые тесты завершаются неудачно. Вместо этого, он сохраняет все ошибки в дополнительных файлах в директории target и позволяет продолжить сборку. Позже, когда мы вызываем его цель verify, он прерывает сборку, если во время выполнения его цели integration-test возникли ошибки.

Для точности, это порядок, в котором Maven будет выполнять настроенные цели:

Запустите mvn clean install и посмотрите, как это работает. Если по какой-то причине это не работает, не стесняйтесь сообщить об ошибке на GitHub.

Теперь пришло время создать интеграционный тест, который будет подключаться к временному серверу MySQL, создавать таблицу и вставлять в нее некоторые данные. Это всего лишь пример, чтобы показать, что сервер MySQL работает и способен обрабатывать транзакции (я использую jcabi-jdbc).

Если вы используете Hibernate, просто создайте файл db.properties в директории src/test/resources. В этом файле вы можете выполнить что-то вроде:

Maven заменит ${mysql.port} на номер зарезервированного TCP-порта во время копирования ресурсов. Эта операция называется “фильтрация ресурсов”, и вы можете прочитать об этом здесь.

Вот и все. Я использую jcabi-mysql-maven-plugin в нескольких проектах, и он помогает мне быть уверенным, что мой код работает с реальным сервером MySQL. Я также использую плагин Liquibase Maven для заполнения пустого сервера таблицами, необходимыми для приложения. Однако это история для следующей публикации.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-17 at 14:15

sixnines availability badge   GitHub stars