Spring 3 - 测试控制器@Autowired Servlet Context

tsu*_*e21 13 spring-mvc junit4

我有一个带有以下注释的控制器

@Autowired
ServletContext servletContext;
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,并正确地自动装配servlet上下文.但是,当我尝试运行junit时,我得到以下异常:

org.springframework.beans.factory.BeanCreationException:创建名为'ControllerTest'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:javax.servlet.ServletContext

奇怪的问题是,这只发生在ServletContext上,我在这个特定的控制器上有其他bean自动装配,并且单元测试适用于那些.

任何建议都会非常有帮助.

kro*_*ock 10

正如@bluefoot所说,你应该使用MockServletContext.为此,您可以实现ServletContext的自动连接ServletContextAware.当在Web应用程序上下文中运行并注入ServletContext时,Spring会注意到这一点,在JUnit测试中,您可以调用setServletContext方法来设置MockServletContext.


blu*_*oot 6

好吧,你不应该ServletContext在junit测试环境中有一个真实的.

您应该使用MockServletContext.

  • 感谢您的想法,我修复了它将以下代码添加到其中一个xml文件中:<bean id ="servletContext"class ="org.springframework.mock.web.MockServletContext"/> (4认同)