8

Kilka razy przeczytałem dokumentację (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework) i nie mogę potwierdzić, że kontekst WebApplicationContext, który zostanie wstrzyknięty podczas korzystania z adnotacji @WebApplicationContext, faktycznie polega na przejrzeniu pliku web.xml.Czy nowy Spring Spring MVC Test Framework wydany wiosną 3.2 przetestuje konfigurację web.xml?

Innymi słowy, chcę przetestować moją konfigurację web.xml. Filtry i ścieżka serwletu specyficznie. Ale kiedy konfiguruję mój test, ignoruje on plik web.xml. (Np staram się get żądania na URL jak ten /myServletPath/foo i to nie z 404.)

Moje testy:

@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)); 
    } 
} 

A moja 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> 

Odpowiedz

8

masz rację Test Spring-mvc nie odczytuje pliku web.xml, ale możesz skonfigurować filtry w ten sposób:

webAppContextSetup(this.wac).addFilter(new DefaultWebappMetricsFilter(), "/*").build() 
+0

Dzięki. To jest pomocne. Nadal nie jestem pewien, dlaczego stworzenie makiety wymaga lokalizacji głównego katalogu aplikacji, jeśli nie czyta się pliku web.xml. Zobacz mój komentarz na odpowiedź Ralpha http://stackoverflow.com/a/14026570/411229. –

+1

, ponieważ wykorzystuje inne zasoby z głównego katalogu aplikacji internetowych - na przykład. jeśli umieściłeś konfigurację aplikacji internetowej Spring, np. WEB-INF/spring/appcontext.xml, ale nie w ścieżce klas, nadal będzie mógł uzyskać do niej dostęp i wczytać ją w teście. –

+0

ma to sens. Dokumentacja nie jest bardzo jasna w tym punkcie. Dzięki za wyczyszczenie. –