2011-09-19 8 views
11

Me gustaría hacer pruebas para mi aplicación web, pero la configuración de contexto falla en el autoencendido servletContext. Error a continuación. Autowiring servletContext funciona bien cuando ejecuto la aplicación web en tomcat/jetty.Pruebas unitarias Spring web-app de MVC: no se pudo autoconectar el campo: private javax.servlet.ServletContext

java.lang.IllegalStateException: No se ha podido cargar Application Context ... Causado por: org.springframework.beans.factory.BeanCreationException: Error creando frijol con el nombre 'testController': La inyección de dependencias autowired fallado; la excepción anidada es org.springframework.beans.factory.BeanCreationException: no se pudo campo de autovínculo: private javax.servlet.ServletContext com.test.controllers.TestController.servletContext; excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: No coincidencia de frijol de tipo [javax.servlet.ServletContext] encontró para dependencia: esperado al menos 1 bean que califica como Autowire candidato para esta dependencia. anotaciones Dependencia: {@ org.springframework.beans.factory.annotation.Autowired (requiere = true)}

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("classpath:applicationContext.xml") 
public class FirstTest { 

    @Test 
    public void doTest() throws Exception { 
     // ... 
    } 
} 

TestController

@Controller 
public class TestController { 

    @Autowired 
    private ServletContext servletContext; 

    ... 
} 
+1

Ver esta respuesta relacionada http://stackoverflow.com/questions/2674697/how-to-inject-servletcontext-for-junit -tests-with-spring – ptomli

+0

Gracias. ¿Cómo se usa 'MockServletContext' con' @ ContextConfiguration'? – marioosh

+0

Solo incluya una definición para el 'MockServletContext' en su archivo' applicationContext.xml' – ptomli

Respuesta

24

Según ptomli indirecta, definiendo MockServletContext bean hacer la truco.

<bean class="org.springframework.mock.web.MockServletContext"/> 

Otro problema, que apareció fue tilesConfigurer, que no funciona:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'tilesConfigurer' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException 

soultion: azulejos separados CONFIG desde applicationContext.xml y no utilizar los azulejos en las pruebas JUnit.

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:applicationContext.xml 
      classpath:tilesConfig.xml 
     </param-value> 
    </context-param> 
</web-app> 
+4

Funciona. Otra opción es anotar la prueba con @WebAppConfiguration – borjab

10

He añadido @WebAppConfiguration bajo la clase de prueba y el problema desapareció

+0

Y supongo que esta es la respuesta correcta. –

Cuestiones relacionadas