在我们的项目中,我们正在编写测试以检查控制器是否返回正确的模型视图
@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,但是我们不知道如何加载位于src \ main \ webapp \ root \ WEB-INF \ root-context.xml的正确xml。
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class TestOverzichtSenario{ ....
该文档不够清晰,难以理解
关于如何确保contextannotation加载正确的xml的任何建议?
编辑v2
我将配置.xml文件从webINF文件夹复制到了
src\main\resources\be\..a bunch of folders..\configuration\*.xml
并将webinf中的web.xml更改为
<param-name>contextConfigLocation</param-name> <param-value> classpath*:configuration/root-context.xml classpath*:configuration/applicationContext-security.xml </param-value>
现在得到错误
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
据我所知,没有很好的方法可以webapp从单元测试中访问文件夹中的文件。你可以将配置放入其中src/main/resources,以便可以从单元测试(如docs中所述)以及从Webapp(在中使用classpath:前缀contextConfigLocation)访问它。
src/main/resources
classpath:
contextConfigLocation
我们的测试如下所示(使用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 .... }