У меня есть многомодульный проект с аналогичной структурой, как показано ниже:
- сервер (который включает в себя конфигурацию контекста приложения) и другие конфигурации
- 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, но она не работает.
Есть идеи?