У меня возникли некоторые проблемы с запуском интеграционных тестов после обновления зависимости весеннего теста Spring Framework с 4.2.9 до 4.3.9.
Я использую класс ContextConfiguration, который реализует весенний тест SmartContextLoader
, который позволил мне загружать разные файлы конфигурации .xml, разделенные по профилю. На основе текущего профиля весны он будет запускать определенные компоненты для этого профиля.
Этот ContextConfigurationLoader
у меня отлично работал в версии 4.2.9
, но после обновления до версии 4.3
я изо всех сил пытаюсь решить эту проблему.
Я включаю ContextConfigurationLoader
, который я создал в своих интеграционных тестах, вот так.
@ContextConfiguration(loader=ContextConfigurationLoader.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MyIntegrationTest {
// Test Body
}
ContextConfigurationLoader
выглядит так,
public class ContextConfigurationLoader implements SmartContextLoader {
@Override
public void processContextConfiguration(ContextConfigurationAttributes contextConfigurationAttributes) {
}
@Override
public ApplicationContext loadContext(MergedContextConfiguration mergedContextConfiguration) throws Exception {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.getEnvironment().setActiveProfiles(mergedContextConfiguration.getActiveProfiles());
new XmlBeanDefinitionReader(context).
loadBeanDefinitions(mergedContextConfiguration.getLocations());
context.load(
"/development.xml",
"/staging.xml",
"/production.xml",
);
AnnotationConfigUtils.registerAnnotationConfigProcessors(context);
context.refresh();
context.registerShutdownHook();
return context;
}
@Override
public String[] processLocations(Class<?> aClass, String... strings) {
return new String[0];
}
@Override
public ApplicationContext loadContext(String... strings) throws Exception {
ApplicationContext context = ApplicationContextFactory.create();
context.getBean("dbUnitDatabaseConnection");
return ApplicationContextFactory.create();
}
}
Наконец, это ответ об ошибке, который я получаю после попытки запустить мои тесты.
java.lang.IllegalStateException: ContextConfigurationLoader was unable to detect defaults, and no ApplicationContextInitializers or ContextCustomizers were declared for context configuration attributes [[ContextConfigurationAttributes@53ca01a2 declaringClass = 'com.class.path.to.MyIntegrationTest', classes = '{}', locations = '{}', inheritLocations = true, initializers = '{}', inheritInitializers = true, name = [null], contextLoaderClass = 'com.class.path.to.ContextConfigurationLoader']]
Спасибо за вашу помощь, дайте мне знать, если вам нужна дополнительная информация.
Одно решение, которое я нашел, заключается в том, чтобы включить все файлы конфигурации .xml в один файл и использовать аннотацию @ContextConfiguration
, подобную этой.
@ContextConfiguration("/config.xml")
Но для этого потребуются некоторые другие изменения в остальной части кода помимо тестов. Это также не помогает объяснить, почему моя текущая реализация не работает в последней версии весеннего теста Spring Framework.