8

मैंने दस्तावेज़ों को कई बार पढ़ा है (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/testing.html#spring-mvc-test-framework) कई बार और मैं पुष्टि नहीं कर सकता कि WebApplicationContext संदर्भ है जो @WebApplicationContext एनोटेशन का उपयोग करते समय इंजेक्शन प्राप्त होता है, वास्तव में web.xml को देख रहा है।क्या स्प्रिंग 3.2 में जारी किया गया नया स्प्रिंग एमवीसी टेस्ट फ्रेमवर्क web.xml कॉन्फ़िगरेशन का परीक्षण करता है?

दूसरे शब्दों में, मैं अपने web.xml कॉन्फ़िगरेशन का परीक्षण करना चाहता हूं। फिल्टर और सर्वलेट पथ विशेष रूप से। लेकिन जब मैं अपना परीक्षण कॉन्फ़िगर करता हूं तो यह web.xml को अनदेखा करता है। (उदाहरण के लिए मैं इस /myServletPath/foo जैसी URL पर एक get अनुरोध कोशिश करते हैं और यह एक 404. साथ विफल रहता है)

मेरा परीक्षण:

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

और मेरे 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> 

उत्तर

8

आप ठीक कह रहे हैं , स्प्रिंग-एमवीसी-टेस्ट web.xml फ़ाइल नहीं पढ़ता है, लेकिन आप फ़िल्टर को इस तरह कॉन्फ़िगर कर सकते हैं:

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

धन्यवाद। यह सहायक है। मुझे अभी भी यकीन नहीं है कि नकली सृजन को वेब अनुप्रयोग रूट के स्थान की आवश्यकता क्यों है यदि यह web.xml नहीं पढ़ रहा है। राल्फ के उत्तर http://stackoverflow.com/a/14026570/411229 पर मेरी टिप्पणी देखें। –

+1

क्योंकि यह वेब अनुप्रयोग रूट से अन्य संसाधनों का उपयोग करता है - उदाहरण के लिए। यदि आपने वेब स्प्रिंग वेब एप्लिकेशन कॉन्फ़िगरेशन को WEB-INF/spring/appcontext.xml में रखा था, हालांकि क्लासपाथ में नहीं है, तो यह अभी भी परीक्षण में इसे एक्सेस और लोड करने में सक्षम होगा। –

+0

जो समझ में आता है। दस्तावेज उस बिंदु पर बहुत स्पष्ट नहीं है। इसे क्लीयर करने के लिए शुक्रिया। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^