2013-06-20 5 views
21

मैं अपने नियंत्रक (getPersons) को जांचने के लिए एक परीक्षण केस लिखना चाहता हूं। यह एक सर्वर साइड कोड है। मैं भ्रम की स्थिति क्या मैं अंदर दूसरी बात रखना चाहिए @ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/app-contest.xml"})स्प्रिंग नियंत्रक के JUnit परीक्षण के लिए ApplicationContext लोड करने में विफल

है, मैं इस तरह कुछ त्रुटियाँ हो रही है:

आवेदन संदर्भ लोड करने में असफल। पथ [जो मैं @ContextConfiguration में निर्दिष्ट] नहीं खोजा जा सका

मैं इस तरह एक संरचना है:

restAPI 
    *src/main/java 
     com.company.controller 
     personController.java 
    *Test 
     com.company.testController 
     personControllerTest.java 
    *src 
     main 
     webapp 
     WEBINF 
      app-context.xml 


@Autowired 
private PersonService personService; 

@RequestMapping(value="/t2/{yy_id}/person", method=RequestMethod.GET) 
@ResponseBody 
public PersonInfo[] getPersons() { 

    return personService.getPersons(); 
} 

यह मेरा टेस्ट है

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"classpath:WEB-INF/app-context.xml"}) 
@WebAppConfiguration 
public class PersonControllerTest { 


@Autowired 
private WebApplicationContext wac; 

private MockMvc mockMvc; 

@Before 
public void setup() { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 
} 

@Autowired 
private PersonService personService; 

@Test 
public void getPersons() throws Exception { 

    this.mockMvc.perform(get("/t2/1/person") 
      .accept(MediaType.APPLICATION_JSON)) 
      .andExpect(status().isOk()); 

} 

ट्रेस

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157) 
    at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:103) 
    at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:73) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:313) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:284) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [WEB-INF/application-context.xml]; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/application-context.xml] cannot be opened because it does not exist 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243) 
    at org.springframework.test.context.web.GenericXmlWebContextLoader.loadBeanDefinitions(GenericXmlWebContextLoader.java:38) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:113) 
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:59) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:100) 
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:248) 
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:124) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:148) 
    ... 24 more 
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/app-context.xml] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:157) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328) 

क्या कोई इसे यहां समझने में मदद कर सकता है कि यह क्या गलत है?

+0

मुझे लगता है कि 'वेब-आईएनएफ' स्थान 'फ़ाइल:/WEB-INF/...' के माध्यम से लोड किया जाना चाहिए और 'क्लासपाथ: वेब-आईएनएफ' नहीं। –

+0

मैंने फ़ाइल को भी आजमाया है, मुझे अभी भी एक ही एरर मिल रहा है – Saurabh

+0

क्या आप वाकई वर्तनी त्रुटि नहीं कर रहे हैं? ऐप-report.xml के बजाय ऐप-context.xml; o –

उत्तर

19

जैसा कि बताया गया है: वेब-आईएनएफ वास्तव में कक्षा पथ का हिस्सा नहीं है। यदि आप मैवेन जैसे सामान्य टेम्पलेट का उपयोग करते हैं, तो ऐप-context.xml को रखने के लिए src/main/resource या src/test/संसाधनों का उपयोग करें। फिर आप 'classpath:' का उपयोग कर सकते हैं।

प्लेस src/मुख्य/संसाधन/एप्लिकेशन-context.xml और उपयोग कोड

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:app-context.xml") 
public class PersonControllerTest { 
... 
} 

या आप सेम के विभिन्न विन्यास के साथ yout परीक्षण संदर्भ बना सकते हैं में अपने कॉन्फ़िग फ़ाइल।

प्लेस src/परीक्षण/संसाधन/परीक्षण-ऐप्लिकेशन-context.xml और उपयोग कोड में अपने कॉन्फ़िग फ़ाइल

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:test-app-context.xml") 
public class PersonControllerTest { 
... 
} 
+0

के समानांतर है I प्रोजेक्ट – Saurabh

+0

में मैवेन का भी उपयोग कर रहा हूं ठीक है, मैंने संपादित किया है और मेरा जवाब बढ़ाएं, तो अब आप इसे अपने प्रोजेक्ट, सौरभ में लागू कर सकते हैं। –

+2

आपके द्वारा उल्लेखित पहले मामले में, आपने ऐप-context.xml फ़ाइल को src/main/संसाधनों में रखा है। लेकिन जब आप परीक्षण चलाते हैं, तो उसे वहां नहीं मिलेगा, लेकिन src/test/संसाधन। तो यूनिट परीक्षणों के लिए इसे कहाँ रखा जाना चाहिए? – mcanti

0

आप Maven का उपयोग कर रहे हैं, तो अपने pom.xml में नीचे config जोड़ें:

<build> 
    <testResources> 
       <testResource> 
        <directory>src/main/webapp</directory> 
       </testResource> 
    </testResources> 
</build> 

इस कॉन्फ़िगरेशन के साथ, आप वेब-आईएनएफ फ़ोल्डर में एक्सएमएल फाइलों तक पहुंच पाएंगे। मेवेन पीओएम संदर्भ से: परीक्षण स्रोत तत्व ब्लॉक में testResource तत्व शामिल हैं। उनकी परिभाषा संसाधन तत्वों के समान होती है, लेकिन स्वाभाविक रूप से परीक्षण चरणों के दौरान उपयोग की जाती है।

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