Ich habe die Dokumente (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework) mehrmals gelesen, und ich kann nicht bestätigen, wenn der WebApplicationContext
Kontext, der injiziert wird, wenn Sie die @WebApplicationContext
Annotation verwenden, tatsächlich auf die web.xml schaut.Testet das neue Spring MVC Test Framework, das im Frühjahr 3.2 veröffentlicht wurde, die web.xml-Konfiguration?
Mit anderen Worten, ich möchte meine web.xml-Konfiguration testen. Die Filter und der Servlet-Pfad speziell. Aber wenn ich meinen Test konfiguriere, ignoriert er die web.xml. (ZB ich versuche, eine get
Anfrage auf eine URL wie diese /myServletPath/foo
und es scheitert mit einem 404.)
Mein Test:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration({
"classpath*:WEB-INF/config/application-context.xml",
"classpath*:WEB-INF/oms-servlet.xml",
"classpath*:persistence-context.xml"
})
public class OrderSummaryControllerIntegrationTests {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
this.mockMvc = webAppContextSetup(this.wac).build();
}
@Test
public void testFindOrderSummariesExpectsSuccess() throws Exception {
mockMvc.perform(get("/oms/orders?user=1234&catalog=bcs"))
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON));
}
}
Und meine web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>OMS REST Services</display-name>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<filter>
<filter-name>webappMetricsFilter</filter-name>
<filter-class>com.yammer.metrics.web.DefaultWebappMetricsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>webappMetricsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/application-context.xml, classpath*:persistence-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>oms</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>oms</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Danke. Das ist hilfreich. Ich bin mir immer noch nicht sicher, warum die Erstellung des Mocks den Speicherort des Webanwendungsstamms benötigt, wenn er die web.xml nicht liest. Siehe meinen Kommentar zu Ralphs Antwort http://stackoverflow.com/a/14026570/411229. –
, weil es andere Ressourcen aus dem Webanwendungsstamm verwendet - z. Wenn Sie Ihre Spring-Webanwendungskonfiguration z. B. in WEB-INF/spring/appcontext.xml platziert haben, könnte sie dennoch im Klassenpfad zugreifen und sie im Test laden. –
das macht Sinn. Die Dokumentation ist in diesem Punkt nicht sehr klar. Danke, dass du es aufgeräumt hast. –