你說得對:這不是Spring Boot的問題。但這也不是spring-test
的問題。
相反,這是Spring一般的預期行爲。有關詳細信息,請查看我對此問題的回答:@ActiveProfiles in meta annotation and on test class not working
總之,在單個測試類(直接或作爲元註釋)上聲明的兩個@ContextConfiguration
註釋不能實現此目的。
但是,我只是想出了一個的技巧,這將允許你實現這一點。具體而言,您可以創建一個登錄一個或多個@Configuration
類的ApplicationContextInitializer
(ACI)。在您的註釋中,您可以註冊此ACI以註冊總是出現@Configuration
類別。當實際使用組合註釋時,它可以像正常一樣聲明額外的@Configuration
類。
我剛剛在this commit提交了一個工作示例。
基本上,代碼會是這個樣子:
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, initializers = FooConfigInitializer.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ComposedContextConfiguration {
@AliasFor(annotation = ContextConfiguration.class, attribute = "classes")
Class<?>[] value() default {};
}
public class FooConfigInitializer implements ApplicationContextInitializer<GenericApplicationContext> {
@Override
public void initialize(GenericApplicationContext applicationContext) {
new AnnotatedBeanDefinitionReader(applicationContext).register(FooConfig.class);
}
}
而且你可以使用它像這樣:
@RunWith(SpringRunner.class)
@ComposedContextConfiguration(BarConfig.class)
public class InitializerConfiguredViaMetaAnnotationTests { /* ... */ }
你ApplicationContext
將被從FooConfig
和BarConfig
加載。
上面的例子顯然不使用Spring Boot,但同樣的原理也應該適用於@SpringApplicationConfiguration
。
問候,
山姆(Spring的TestContext框架的作者)
FYI:'@ContextConfiguration(AdditionalTestConfiguration.class)'不會編譯。 '@ ContextConfiguration'中的'value'屬性是XML文件或Groovy腳本位置的String []。 –
謝謝,爲了趕上。我從頭頂上打字。糾正。 –