spring - @ContextConfiguration не удается загрузить файл конфигурации в src/test/resources

Я попытался загрузить файл конфигурации spring в путь к классам src/test/resources со следующим абстрактным классом:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/applicationContext.xml"})
public class BaseIntegrationTests {

}

У меня есть файл applicationContext.xml в src/test/resources, но Spring не может его загрузить.

Спасибо.


person robinmag    schedule 09.04.2010    source источник
comment
Пожалуйста, используйте блоки code, чтобы отложить фрагменты кода.   -  person Josh K    schedule 09.04.2010
comment
Я думаю, вам не нужно /, просто используйте classpath:applicationContext.xml   -  person ant    schedule 09.04.2010
comment
Это соответствует моим потребностям: stackoverflow.com/questions/10385452/   -  person    schedule 05.06.2013


Ответы (7)


Если быть точным, это содержимое каталога вывода теста (target/test-classes), которое находится в пути к классу, а не src/test/resources. Но ресурсы под src/test/resources копируются в каталог вывода теста с помощью ссылки resources:testResources цель (которая по умолчанию привязана к этапу process-test-resources).

При этом ваш код выглядит нормально, а ресурсы для исходного кода теста должны были быть скопированы либо вашей IDE, либо Maven при выполнении тестов и, таким образом, должны быть доступны в пути к классам. Значит, должно быть что-то еще не так. Я вижу, что ваш класс является базовым классом для интеграционных тестов. Вы настроили что-нибудь необычное в своем pom? Можешь показать?

person Pascal Thivent    schedule 09.04.2010
comment
Процесс-тест-ресурсы помогли. Исправил пом. Спасибо! - person Azee; 04.12.2013
comment
мой ресурс находится в каталоге тестовых классов, и я могу загрузить файл с помощью Myclass.class.getClassLoader.getResource("/my/path"). но не работает с @ContextConfiguration(location = "classpath:/my/path") - person herau; 13.06.2014

Попробуйте использовать *, чтобы он мог искать ваш путь к классам

@ContextConfiguration(locations={"classpath*:applicationContext.xml"})
person prashant thakre    schedule 04.07.2013
comment
Что делает * по сравнению с {"classpath:applicationContext.xml"? Искать любую глубину пути к классам? Я не могу найти документацию, объясняющую это. - person markdsievers; 10.08.2016
comment
@markdsievers объединяет несколько файлов в один вместо выбора первого найденного. См.: stackoverflow.com/a/3294506/344480. - person Matthias; 20.10.2017

Существует сообщенная ошибка при использовании зависимости spring-test (включая SpringJUnit4ClassRunner) с версиями JUnit > 4.4.

Если вы используете версию JUnit новее 4.4, попробуйте перейти на версию 4.4 и посмотреть, решит ли это вашу проблему.

person Jesse Webb    schedule 21.05.2010

ваш контекст приложения должен быть включен в classpath и поставить * :

@ContextConfiguration(locations = { "classpath:*/application-context.xml" })
person borchvm    schedule 14.05.2014

Кажется, вы используете maven и пытаетесь запустить тесты из eclipse. Проверьте папку сборки (target/test-classes/) на наличие applicationContext.xml. Если его нет, вам придется сначала построить.

person Bozho    schedule 09.04.2010
comment
Так было со мной. Спасибо помогло и сэкономило время - person SDB; 18.06.2021

Я думаю, что у меня похожая проблема, я обнаружил, что мой application-context.xml не был в target/test-classes/neighter в src/test/resources

person benzen    schedule 15.11.2010

Если вы используете Maven и запускаете тестовые примеры из eclipse, щелчок правой кнопкой мыши по проекту > Maven > обновление maven (ALTF5) может вам помочь.

person Rupali    schedule 01.06.2017