2017-02-06 17 views
0

Рассмотрим модуль утилиты maven (модуль 1), который определяет абстрактный класс: AbstractFoo.java. В тестовых ресурсах макет указанного класса написан: FooMockup.java. Также написан тестовый класс: AbstractFooTest.java.создать тестовую библиотеку maven junit для модуля

Теперь рассмотрим второй модуль (модуль 2), который содержит класс, который использует AbstractFoo, а также объявляет тестовые примеры: Bar.java и BarTest.java. BarTest.java создает экземпляр FooMockup при создании экземпляра Bar.

Зависимости просты.

Модуль 1 ЦСИ: зависит от ничего

Модуль 1 тест: зависит от модуля 1 Src

Модуль 2 ЦСИ: зависит от модуля 1 Src

Модуль 2 Тест: зависит от модуля 1 и 2 src и module 1 test

Здесь нет круговой зависимости. Проблема возникает при использовании maven. Maven предоставляет два способа импорта тестовых зависимостей: https://maven.apache.org/plugins/maven-jar-plugin/examples/create-test-jar.html

Если я использую «простой способ», то maven отказывается управлять транзитивными зависимостями, что не является ни простым, ни предпочтительным. Чтобы использовать «предпочтительный путь», мне нужно перенести тесты для модуля 1 в его собственный модуль. Поскольку макет зависит от модуля 1 src, а тест модуля 1 зависит от макета, я должен сохранить макет в том же пакете, что и макет. Стандарт maven заключается в том, чтобы проводить тесты в режиме src/test, а не в отдельном модуле. Следовательно, это нарушение в стандарте maven не хорошо интегрируется с некоторыми IDE и требует конфигурации в других.

За исключением создания настраиваемого плагина maven, который разрешает транзитивные тестовые зависимости для контейнеров с тестовой областью, существует ли способ сохранить AbstractFooTest в том же модуле, что и AbstractFoo. И имеют ли maven разрешающие транзитивные зависимости для FooMockup?

+0

Лично я бы не использовал ваши тестовые объекты в другом проекте. Кроме того, используйте что-то вроде Mockito, чтобы быстро создать свои макетные объекты. – TedTrippin

+0

@TedTrippin Спасибо. Я знаю об этой библиотеке. Я привел пример, который я сделал для краткости и простоты. В реальной жизни я фактически не использую макет, а полезный класс. Если этот простой случай можно решить, я могу расширить решение моей реальной проблемы. Я предпочитаю учиться ловить рыбу, а не давать ей. :) –

+0

Являются ли эти тесты модульными испытаниями? – khmarbaise

ответ

1

Невозможно. См. this. Более конкретно,

Проблемы здесь состоит в том, что при проектировании зависимости испытаний не транзитивны

Мы столкнулись созданный проект теста-инфраструктура аналогичной проблемы и которая держит классы в SRC/основной. В конечном итоге это оказалось полезным, поскольку это привело к лучшей сегрегации проектов.

Если вы хотите придерживаться своего нынешнего пути, вам просто нужно дублировать зависимости или хранить их в родительском помпе.

+0

Спасибо.Вот чего я боялся. –