我们在测试中使用@ContextHierarchy来启用上下文缓存,但允许一些文本自定义上下文。我有一个问题,一个测试需要激活一个特定的Spring配置文件,它激活一个被注入测试的bean。
我有一种感觉这是不可能的,但我正在寻找确认。逻辑上,父上下文已经初始化,所以我愿意相信Spring会根据在测试中激活的配置文件重新连接父上下文的问题,该测试基本上只是通过@ContextHierarchy添加子上下文。但是在谷歌搜索之后我找不到任何描述这个问题的人。
基础测试类如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextHierarchy(
@ContextConfiguration(classes = BaseConfig.class, initializers = TestContextInitialiser.class)
)
public abstract class BaseTest extends AbstractTransactionalJUnit4SpringContextTests {
...
}
具体测试类如下所示:
@ContextHierarchy(
@ContextConfiguration(initializers = NotificationTest.CustomInitializer.class)
)
public class NotificationTest extends BaseTest {
@Autowired
private EventsConfig eventsConfig; // bean that needs to be activated via profile
...
public static class CustomInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
applicationContext.getEnvironment().addActiveProfile("EVENTS_ENABLED");
}
}
}
EventsConfig类使用@Profile ...
@Component
@Profile("EVENTS_ENABLED")
public class EventsConfig {
...
}
Spring的错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [xxx.EventsConfig] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我希望Spring在这种情况下至少会发出警告/错误,并解释无法使用新的配置文件修改父上下文。
任何输入/指导表示赞赏。这或类似的东西可能吗?重构此测试以避免使用基类将是一件痛苦的事。
由于