我想在其WebApplicationContextUtils.getRequiredWebApplicationContext(context)
方法中对依赖于Spring init()
的servlet代码进行单元测试。
以下是代码的一部分:
@Override
public void init() throws ServletException {
super.init();
WebApplicationContext applicationContext =
WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.injectedServiceBean = (SomeService) applicationContext.getBean("someBean");
}
将适当的applicationContext.xml(测试版本)注入此文本的最佳方法是什么?
我知道Spring的@ContextConfiguration
,但我不确定将该注释加载到{servlet上下文中的${testClass}Test-context.xml
上下文的最佳方法,以便getRequiredWebApplicationContext (...)可以退货。
答案 0 :(得分:9)
您可以通过以下方式注入应用程序上下文:
getServletContext().setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
testApplicationContext
);
这是有效的,因为WebApplicationContextUtils
使用ServletContext
键(org.springframework.web.context.WebApplicationContext.ROOT
常量)提取存储在WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
中的对象。
这只表明直接从应用程序上下文中提取bean是有问题的,因为这种方法不遵循DI规则。如果可以,请尝试重构此servlet以更好地与Spring集成(例如,使用HttpRequestHandlerServlet
see example)。