Модульные тесты для интерфейса поставщика услуг в Maven

Недавно наша команда разработчиков перешла с файлов сборки Ant на Maven для управления проектами и цикла сборки. Пока что я действительно доволен результатами. Поскольку я до сих пор не могу разобраться с Maven, у меня нет готового ответа на необычные требования к сборке.

Теперь я создал новый проект и решил сразу же приступить к правильной настройке Maven. Проект действительно представляет собой API, который использует интерфейс поставщика услуг Java (SPI) для поиска подключаемых реализаций. Реализации могут регистрировать себя обычным способом META-INF / services / factoryname. API выполняет большую часть работы, но для получения чего-то действительно полезного необходима реализация.

Теперь у меня вопрос: как мне написать модульные тесты для этого? На ум пришло два метода:

  1. Создайте простую реализацию в тестовых пакетах, создайте ее, а затем используйте ее для модульного тестирования. Похоже, это не вписывается в жизненный цикл проекта Maven.

  2. Создайте отдельный проект, содержащий тестовую реализацию. Хотя это означает еще одну запись в нашем репозитории SVN, это похоже на более чистый подход. Проект можно построить и использовать в качестве фляги в цикле тестирования основного проекта API. Он может быть указан как артефакт зависимости с областью тестирования в основном проекте.

В обоих случаях есть фундаментальная проблема... Реализация потребует основного API для компиляции. В конце концов, он должен иметь класс фабрики, который реализует абстрактную фабрику API. Но для правильной сборки основного API, фазы тестирования и всего этого потребуется реализация теста. Это действительно вопрос циклических зависимостей.

Какой хороший способ справиться с этим в Maven? В Ant я просто построил бы реализацию между API и его тестами. Если это помогает узнать, я немного злоупотребляю SPI, чтобы найти пакеты объектных моделей, а не отдельную реализацию. Это меньше похоже на JAXP и больше похоже на способ регистрации ресурсов.

1 ответ

Решение

Вы можете использовать maven-jar-plugin для генерации test-jar как часть обычного процесса сборки. Таким образом, вы генерируете оба артефакта за один шаг.

Другие вопросы по тегам