8

Dokümanları (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework) birkaç kez okudum ve @WebApplicationContext ek açıklamasını kullandığınızda enjekte edilen WebApplicationContext içeriğinin gerçekten web.xml dosyasına bakıp bakmadığını doğrulayamıyorum. Başka bir deyişle web.xml yapılandırmamı test etmek istiyorum. Filtreler ve sunucu yolu özellikle. Ancak testimi yapılandıracağım zaman web.xml'yi yok sayar. (Örneğin bu /myServletPath/foo gibi bir URL'ye bir get isteği denemek ve bir 404 ile başarısız)İlkbahar 3.2'de yayınlanan yeni Spring MVC Test Framework'ü web.xml yapılandırmasını test ediyor mu?

Benim testi:

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

Ve 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> 

cevap

8

Haklısınız , Spring-mvc-test web.xml dosyasını okumaz, ancak bu şekilde filtreleri şu şekilde yapılandırabilirsiniz:

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

Teşekkürler. Bu yardımcı olur. Web.xml okumuyorsa alayın oluşturulmasının web uygulama kökünün konumunun neden gerekli olduğundan hala emin değilim. Ralph'ın http://stackoverflow.com/a/14026570/411229 cevabındaki yorumumu görün. –

+1

, çünkü web uygulama kökünden diğer kaynakları kullanır - örneğin. Spring web uygulama yapılandırmanızı WEB-INF/ilkbahar/appcontext.xml içine yerleştirdiyseniz, sınıf yolunda olmamasına rağmen, yine de sınava girip yükleyebilir. –

+0

bu mantıklı. Bu noktada belgeler çok açık değil. Temizlediğin için teşekkürler. –