8

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> 

Antwort

8

Sie haben Recht , Spring-mvc-test liest die web.xml-Datei nicht, aber Sie können die Filter auf diese Weise konfigurieren:

+0

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. –

+1

, 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. –

+0

das macht Sinn. Die Dokumentation ist in diesem Punkt nicht sehr klar. Danke, dass du es aufgeräumt hast. –