У меня есть многомодульный проект, в котором только корневой модуль имеет класс с @SpringBootApplication. Другие модули добавляются в файл POM корневого модуля в качестве зависимостей. Чтобы протестировать другие модули, я создал модуль (назовем его тестовым модулем) с аннотированным классом @SpringBootApplication и другими тестовыми классами для запуска контекста Spring в тестах модулей. Я добавил тестовый модуль в качестве зависимости от других модулей, но контекст Spring не запускается, когда я запускаю тесты с maven. Как правильно добавить?
структура проекта:
---> root (this module starts spring context)
|
|--- moduleA
|
|--- moduleB
Я хочу протестировать модуль A и модуль B, поэтому я создал тестовый модуль с необходимыми зависимостями и классом с аннотацией @SpringBootApplication.
|--- test-module (module with @SpringBootApplication)
|
|---> moduleA (test-module as dependency in test scope)
|
|---> moduleB (test-module as dependency in test scope)
Если в вашем модуле нет @SpringBootApplication, вы должны использовать @ContextConfiguration вместо @SpringBootTest в тестовом коде junit.
Во-первых, вы определяете класс в /src/test, который может называться «TestConfig», используя @Configuration и @ComponentScan, импортируя bean-компоненты, которые вы хотите протестировать.
Во-вторых, вы используете @ContextConfiguration(classes = {TestConfig.class}) в заголовке теста junit.
Ниже приведен пример кода:
TestConfig.java
@Configuration
@ComponentScan(basePackages = {"com.xxx"}) // base package of module or what package you want to import. you can write more ones if there are more than one package.
public class TestConfig {
}
Юнит тест
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
public class TestServiceA {
@Autowired
public ServiceA serviceA;
//...
}
Не могли бы вы предоставить свой pom.xml всех модулей (A, B и родительский)?