Модульное тестирование в многомодульном проекте с весенней загрузкой - PullRequest
3 голосов
/ 31 марта 2020

У меня есть многомодульный проект с аналогичной структурой, как показано ниже:

  • сервер (который включает в себя конфигурацию контекста приложения) и другие конфигурации
  • shared (классы утилит, используемые другими модулями)
  • сервис (модуль с различными хранилищами и сервисами)
  • транзакция (модуль, который обрабатывает транзакцию) Мне нужно написать тест для проекта, но я не могу изменить структуру проекта. Я создал тест в своем модуле транзакций.

Сначала я получил

Невозможно найти @SpringBootConfiguration, вам нужно использовать @ContextConfiguration или @SpringBootTest (classes =. ..) с вашим тестом

Я решил это, создав файл @Configuration в папке с тестами примерно так:

@Configuration
@ComponentScan("com.mohen")
public class TestConfig {
}

И затем я использовал его в @SpringBootTest(TestConfig.class). Я смог автоматически подключиться, в IDE не было никаких признаков ошибки. Но когда я запускаю свои тесты, я получаю NoSuchBeanDefinitionException от другого класса, который пытается автоматически передать зависимость от сервисного модуля.

Как решить эти проблемы?

Основной файл конфигурации приложения выглядит так:

@SpringBootApplication(scanBasePackages = "com.mohen")
@EnableScheduling
@EnableAsync
@Import(value = {SSIpFilter.class, MainConfig.class})
public class Application extends SpringBootServletInitializer {...}

MainConfig.class содержит componentScan и примечание Import.

Если я пытаюсь импортировать MainConfig.class в моем тесте, я получаю предложение добавить зависимость на сервер модуль, который я бы не хотел делать.

Также все приложение использует один файл свойств (yml). Где мне сохранить файл свойств для теста?

EDIT

Мне удалось запустить тесты, dataJpaTest и интеграционный тест, но он загружает все приложение context.

Теперь проблема в том, что тесты, которые проходят нормально, терпят неудачу, когда я строю свой проект ./gradlew clean build

Я получаю

java .lang .NoClassDefFoundError

в некоторых классах и

Вызывается: javassist.NotFoundException

в других.

У меня есть попытался добавить библиотеку javaassist, но она не работает.

Есть идеи?

1 Ответ

0 голосов
/ 09 апреля 2020

Я нашел решение моего вопроса. Поскольку проект был многомодульным, классы и пакеты не распознавались другими модулями. Я сделал несколько изменений в моих файлах build.gradle модулей.

testRuntime project(':shared')

Я добавил вышеизложенное в зависимости, а также добавил

jar {
    enabled = true
}
bootRepackage{
    enabled = false
}

jar создает простой неисполняемый файл файл jar, в то время как bootRepackage отключает создание исполняемого файла jar, который по умолчанию является его природой.

...