Подтвердить что ты не робот

Местоположение spring -context.xml

Когда я запускаю свое приложение на tomcat, файл spring -context.xml находится в

/WEB-INF/spring -context.xml

Это нормально. Но запустив junit-тест, я должен предоставить ему местоположение моего spring -test-context.xml следующим образом:

@ContextConfiguration(locations={"classpath:/spring-test-context.xml"})

Единственный способ, которым это работает, - это файл, расположенный в

/ЦСИ/spring -context.xml

Как я могу заставить мое приложение найти мои spring -контекстные файлы в одном месте? Так что он работает с junit testes и развернут на tomcat?

Я пробовал это, и это дало мне много ошибок в том, что мы не нашли ни одного beans, но он не сказал, что не смог найти файл.

classpath:/WEB-INF/spring-test-context.xml
4b9b3361

Ответ 1

Как полагают duffymo, Spring TestContext Framework (TCF) предполагает, что по умолчанию строки строки находятся в пути к классам. Подробнее см. JavaDoc для ContextConfiguration.

Обратите внимание, однако, что вы также можете указать ресурсы в файловой системе с абсолютным или относительным путем с использованием Spring абстракции ресурсов (т.е. с помощью префикса "файл:" ). Подробные сведения об этом можно найти в JavaDoc для метода modifyLocations() в Spring AbstractContextLoader.

Так, например, если ваш файл конфигурации XML находится в "src/main/webapp/WEB-INF/spring-config.xml" в папке проекта, вы можете указать местоположение как путь относительной файловой системы следующим образом:

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring-config.xml")

В качестве альтернативы вы можете сохранить ваши файлы конфигурации Spring в пути к классам (например, src/main/resources), а затем ссылаться на них через путь к классам в конфигурации Spring MVC - например:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/spring-config.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

При таком подходе ваша тестовая конфигурация будет выглядеть примерно так (обратите внимание на ведущую косую черту, которая обозначает, что ресурс находится в корневой части пути к классам):

@ContextConfiguration("/spring-config.xml")

Вы также можете найти Контекстную конфигурацию с ресурсами XML в справочном руководстве.

Привет,

Сэм

(автор Spring TestContext Framework)

Ответ 2

Проблема заключается в том, что /WEB -INF не находится в CLASSPATH для веб-приложения. Тем не менее,/WEB-INF/классы.

Ваша проблема с тестированием заключается в том, что вы не работаете на сервере приложений, поэтому WEB-INF/classes по умолчанию не является частью CLASSPATH. Я бы рекомендовал настроить ваши тесты, чтобы либо WEB-INF/classes находились в тесте CLASSPATH, либо использовали относительный или абсолютный путь к файлу для их поиска.