JUnit: как получить доступ к конфигурации Spring в соответствии с намерением Spring?
Существует обучающее видео, представляющее Spring MVC 3.0. В демо-проекте они используют следующую структуру каталогов:
<proj>
src
main
webapp
WEB-INF
spring
appServlet
controllers.xml
servlet-context.xml
root-context.xml
Допустим, у меня есть проект с поддержкой Maven, и я хочу написать тесты JUnit, используя конфигурацию Spring. В настоящее время мы используем JUnit 4.8.2. Это, очевидно, потребует загрузки трех файлов, перечисленных выше.
В тесте я мог использовать аннотации, такие как
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:/WEB-INF/spring/**/*.xml")
Однако, это не находит XML-файлы. Я взглянул на путь к классу и заметил, что только <proj>/target/classes
а также <proj>/target/test-classes
включены по умолчанию.
Одним из очевидных решений было бы добавить правильный путь к пути к классам, но я не знаю, имели ли это в виду парни из Spring.
Поэтому мой вопрос: что мне нужно сделать, чтобы загрузить файлы конфигурации, чтобы он выглядел так, как будто я полный прокодер, использующий Spring?
2 ответа
Вы должны поместить "нормальную" конфигурацию Spring в папку ресурсов, но не в папку webapp: src\main\ressources\WEB-INF\spring\root/spring-context.xml
, Тогда вы можете получить к нему доступ без проблем из теста.
Поместите в веб-интерфейс только весеннюю конфигурацию (servlet-context.xml) webapp
папка.
Структура, которую вы описали, является структурой, сгенерированной STS-Spring-Template:MVC-Template, однако Spring-ROO и Spring-Fuse генерируют структуру, которую я описал. Например Spring ROO:
<project>/src/main/resources/META-INF/spring/applicationContext.xml
<project>/src/main/webapp/WEB-INF/spring/webmvc-config.xml
<project>/src/main/webapp/WEB-INF/web.xml
web.xml:
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml</param-value>
</context-param>
Другой вариант - использовать загрузчик ресурсов файловой системы:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")