tutorial mvc example spring spring-mvc junit junit4 spring-mvc-test

mvc - spring security module



Error al cargar ApplicationContext para la prueba JUnit del controlador Spring (3)

Hola, quiero escribir un caso de prueba para verificar mi controlador (getPersons). Este es un código del lado del servidor. Tengo confusión, ¿qué debo poner dentro de @ContextConfiguration (locations = {"file: src / main / webapp / WEB-INF / app-contest.xml"}) en segundo lugar estoy recibiendo un error como el que no se pudo cargar el contexto de la aplicación. No puedo encontrar la ruta que especifiqué en @ContextConfiguration

Tengo estructura como

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

Esta es mi prueba

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

Rastro

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)

¿Puede alguien por favor ayúdenme a averiguar qué es lo que está mal aquí?


Como se menciona en duscusion: WEB-INF no es realmente una parte de la ruta de clases. Si usa una plantilla común como maven, use src / main / resources o src / test / resources para colocar app-context.xml en. Entonces puedes usar ''classpath:''.

Coloque su archivo de configuración en src / main / resources / app-context.xml y use el código

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

o puede hacer su contexto de prueba con diferentes configuraciones de beans.

Coloque su archivo de configuración en src / test / resources / test-app-context.xml y use el código

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


Me enfrenté a este problema cuando tuve que instalar mi proyecto.

La respuesta proporcionada por Martin Strejc funcionó para mí. Estaba intentando cargar el dispatcher-servlet.xml presente en el directorio Web-INF de la aplicación, pero estaba fallando. Entonces, cambié la ubicación para probar / recursos y cambié el nombre a test-dispatcher-servlet.xml y funcionó como un amuleto.


Si está utilizando Maven, agregue la siguiente configuración en su pom.xml:

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

Con esta configuración, podrá acceder a los archivos xml en la carpeta WEB-INF. De Maven POM Reference: el bloque de elementos testResources contiene elementos testResource. Sus definiciones son similares a los elementos de recursos, pero se usan de forma natural durante las fases de prueba.