У меня большое приложение, распределенное по нескольким XML-файлам определения bean-компонентов Spring. В моем наборе тестов я вручную загружаю нужные мне XML-файлы, используя FileSystemXmlApplicationContext для выполнения тестов, которые я хочу запустить. Это сокращает время настройки теста и позволяет мне использовать те же самые файлы конфигурации, которые используются в производстве.
Теперь я пытаюсь использовать базовые классы транзакционного теста Spring, которые берут конфигурационные местоположения и загружают для меня контекст. По какой-то причине при создании контекста приложения Spring не может найти ни один из файлов конфигурации. Это сбивает с толку, потому что я запускаю тест из того же рабочего каталога, что и при загрузке конфигурации самостоятельно, используя FileSystemXmlApplicationContext. Если я добавлю все свои конфигурации в файл «file:», пути, которые я укажу в моем тесте, будут найдены, но любые файлы, которые импортированы или на которые ссылаются компоненты, определенные в конфигурации (например, файлы свойств), не могут быть найдены. В чем дело? Могу ли я получить тесты, расширяющие классы весенних контекстных тестов, чтобы они работали так же, как те, в которых я сам создаю контекст?
Например, создание такого контекста работает нормально:
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[] { "WEB-INF/services-context.xml"})
Если я расширяю AbstractTransactionalDataSourceSpringContextTests, следующее не находит services-context.xml:
@Override
protected String[] getConfigLocations() {
return new String[] { "WEB-INF/services-context.xml"};
}
Это находит контекст служб, но определенный там PropertyPlaceholderConfigurer не может найти файлы своих свойств.
@Override
protected String[] getConfigLocations() {
return new String[] { "file:WEB-INF/services-context.xml"};
}