Spring 3 - 测试控制器 @Autowired Servlet Context
我有一个带有以下注释的控制器
@Autowired
ServletContext servletContext;
,它似乎工作正常并且可以正确自动连接 servlet 上下文。 但是,当我尝试运行 junit 时,出现以下异常:
org.springframework.beans.factory.BeanCreationException:创建名为“ControllerTest”的 bean 时出错:自动装配依赖项注入失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:javax.servlet.ServletContext
奇怪的问题是,这只发生在 ServletContext 上,我在这个特定的控制器上自动连接了其他 bean,单元测试对这些 bean 工作正常。
任何建议都会非常有帮助。
I have a controller with the following annotation
@Autowired
ServletContext servletContext;
which seems to work fine and to autowired the servlet context properly.
However when I try to run the junit I get the following exception:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ControllerTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: javax.servlet.ServletContext
The strange issue is that this only happened with ServletContext, I have other beans autowired on this particular controller and unit tests works fine for those.
Any advice would be very helpful.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 @bluefoot 所说,您应该使用
MockServletContext
。为此,您可以实现ServletContextAware
。 Spring 在 Web 应用程序上下文中运行时会注意到这一点并注入 ServletContext,并且在 JUnit 测试中您可以调用 setServletContext 方法来设置 MockServletContext。As @bluefoot states, you should use
MockServletContext
. For this to work, instead of auto wiring the ServletContext, you can implementServletContextAware
. Spring will notice this when running in a web application context and inject the ServletContext and in the JUnit test you can call the setServletContext method to set the MockServletContext.好吧,你不应该在 junit 测试环境中拥有真正的 ServletContext 。
您应该使用 MockServletContext。
Well, your're not supposed to have a real
ServletContext
inside a junit test ambient.You should use MockServletContext.