Spring @ContextConfiguration, как установить правильное местоположение для xml

В нашем проекте мы выписываем тест, чтобы проверить, вернул ли controller правильное представление модели

@Test public void controllerReturnsModelToOverzichtpage() { ModelAndView modelView = new ModelAndView(); KlasoverzichtController controller = new KlasoverzichtController(); modelView = controller.showOverzicht(); assertEquals("Klasoverzichtcontroller returns the wrong view ", modelView.getViewName(), "overzicht"); } 

Это возвращает исключение null.

Теперь мы настраиваем @contextconfiguration, но мы не знаем, как загрузить правильный xml, который находится в src \ main \ webapp \ root \ WEB-INF \ root-context.xml

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class TestOverzichtSenario{ .... 

Эта документация недостаточно ясна для понимания

Любое предложение о том, как убедиться, что contextannotation загружает правильный xml?

Изменить v2

Я скопировал конфигурационные .xml-файлы из папки webINF в

 src\main\resources\be\..a bunch of folders..\configuration\*.xml 

и изменил web.xml в webinf на

 contextConfigLocation  classpath*:configuration/root-context.xml classpath*:configuration/applicationContext-security.xml  к contextConfigLocation  classpath*:configuration/root-context.xml classpath*:configuration/applicationContext-security.xml  к contextConfigLocation  classpath*:configuration/root-context.xml classpath*:configuration/applicationContext-security.xml  

и теперь получите ошибку

 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml] org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:467) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:397) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) javax.servlet.GenericServlet.init(GenericServlet.java:212) com.springsource.insight.collection.tcserver.request.HttpRequestOperationCollectionValve.invoke(HttpRequestOperationCollectionValve.java:80) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:379) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) 

Вот почему не следует устанавливать конфигурацию в webapp .

Насколько я знаю, нет хороших способов доступа к файлам в папке webapp из модульных тестов. Вместо этого вы можете поместить свою конфигурацию в src/main/resources , чтобы вы могли получить к ней доступ из ваших модульных тестов (как описано в документах), а также из webapp (используя префикс classpath: prefix в contextConfigLocation ).

Смотрите также:

  • 4.7 Контексты приложений и пути к ресурсам

Наши тесты выглядят так (используя Maven и Spring 3.1):

 @ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... } к @ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... } - @ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... } - @ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... } - @ContextConfiguration ( { "classpath:beans.xml", "file:src/main/webapp/WEB-INF/spring/applicationContext.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-data-servlet.xml", "file:src/main/webapp/WEB-INF/spring/dispatcher-servlet.xml" } ) @RunWith(SpringJUnit4ClassRunner.class) public class CCustomerCtrlTest { @Resource private ApplicationContext m_oApplicationContext; @Autowired private RequestMappingHandlerAdapter m_oHandlerAdapter; @Autowired private RequestMappingHandlerMapping m_oHandlerMapping; private MockHttpServletRequest m_oRequest; private MockHttpServletResponse m_oResp; private CCustomerCtrl m_oCtrl; // more code .... } 

Я думаю, это определенная проблема maven. Maven не копирует файлы /src/main/resources в папку целевого теста. Вам нужно будет сделать это самостоятельно, настроив плагин ресурсов, если вы абсолютно хотите идти этим путем.

Более простой способ – вместо этого установить тестовое конкретное определение контекста в каталог /src/test/resources и загрузить через:

 @ContextConfiguration(locations = { "classpath:mycontext.xml" }) 

Простым решением является

 @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/applicationContext.xml" }) 

от весеннего форума

Мы используем:

 @ContextConfiguration(locations="file:WebContent/WEB-INF/spitterMVC-servlet.xml") 

проект представляет собой динамический веб-проект затмения, тогда путь:

 {project name}/WebContent/WEB-INF/spitterMVC-servlet.xml 

Предположим, вы собираетесь создать test-context.xml, который не зависит от app-context.xml для тестирования, поместите test-context.xml в / src / test / resources. В тестовом classе добавьте аннотацию @ContextConfiguration поверх определения classа.

 @ContextConfiguration(locations = "/test-context.xml") public class MyTests { ... } 

Весенний документ Контекстное управление

Загрузка файла из: {project}/src/main/webapp/WEB-INF/spring-dispatcher-servlet.xml

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring-dispatcher-servlet.xml" }) @WebAppConfiguration public class TestClass { @Test public void test() { // test definition here.. } } 

@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration (locations = {“/Beans.xml”}) public class DemoTest {}

Иногда это может быть что-то довольно простое, как отсутствие файла ресурсов в папке тестовых classов из-за некоторых очистки.

  • Понимание транзакций Spring. Что происходит, когда транзакционный метод вызывает другой транзакционный метод?
  • Давайте будем гением компьютера.