मैंने दस्तावेज़ों को कई बार पढ़ा है (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>
धन्यवाद। यह सहायक है। मुझे अभी भी यकीन नहीं है कि नकली सृजन को वेब अनुप्रयोग रूट के स्थान की आवश्यकता क्यों है यदि यह web.xml नहीं पढ़ रहा है। राल्फ के उत्तर http://stackoverflow.com/a/14026570/411229 पर मेरी टिप्पणी देखें। –
क्योंकि यह वेब अनुप्रयोग रूट से अन्य संसाधनों का उपयोग करता है - उदाहरण के लिए। यदि आपने वेब स्प्रिंग वेब एप्लिकेशन कॉन्फ़िगरेशन को WEB-INF/spring/appcontext.xml में रखा था, हालांकि क्लासपाथ में नहीं है, तो यह अभी भी परीक्षण में इसे एक्सेस और लोड करने में सक्षम होगा। –
जो समझ में आता है। दस्तावेज उस बिंदु पर बहुत स्पष्ट नहीं है। इसे क्लीयर करने के लिए शुक्रिया। –