Вы правы: это не проблема с Spring Boot. Но это также не проблема с spring-test
.
Скорее, это намеченное поведение Весны в целом. Для получения более подробной информации ознакомьтесь с моим ответом на этот вопрос: @ActiveProfiles in meta annotation and on test class not working
Таким образом, вы не можете достичь этого с помощью двух аннотаций @ContextConfiguration
, объявленных на отдельном тестовом классе (непосредственно или в виде мета-аннотаций).
Однако, я просто придумал трюк , который позволит вам достичь этого. В частности, вы можете создать ApplicationContextInitializer
(ACI), который регистрирует один или несколько классов @Configuration
. В вашей составленной аннотации вы можете зарегистрировать этот 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 Framework TestContext)
FYI: '@ContextConfiguration (AdditionalTestConfiguration.class)' не компилировать. Атрибут 'value' в' @ ContextConfiguration' является 'String []' расположения файлов XML или скриптов Groovy. –
Спасибо, за улов. Я печатал его сверху. Исправленный. –