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")
Другие вопросы по тегам