[解决]SpringMVC单元测试基类与异常“call ‘refresh’ before accessing beans via the ApplicationContext”的解决

在Spring MVC的框架下,写Controller的单元测试时,发生过这样的异常(部分内容): call 'refresh' before accessing beans via the ApplicationContext

写贴上我的测试公共类:

public class JUnitSpringBase {
	protected static HandlerMapping handlerMapping;
	protected static HandlerAdapter handlerAdapter;
	@BeforeClass
	public static void setUp(){
		if (handlerMapping==null) {//beforeclass不知道能不能保证这个方法只被调用一次?
			String configXml[]={"classpath*:spring.xml","classpath*:spring-mvc.xml"};
			XmlWebApplicationContext context=new XmlWebApplicationContext();
			context.setConfigLocations(configXml);
			context.refresh();//因为上面不是在构造函数传递配置文件路径,所以需要refresh,重新加载配置
			MockServletContext msc=new MockServletContext();//mock*构造了模拟的web环境
			context.setServletContext(msc);
			msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);//父级上下文环境
			
			//下面两个东西,需要手动配置,不然会找不到bean实例
//			handlerMapping=context.getBean(DefaultAnnotationHandlerMapping.class);
//			handlerAdapter= context.getBean(AnnotationMethodHandlerAdapter.class);
handlerMapping=(HandlerMapping) context.getBean(context.getBeanNamesForType(DefaultAnnotationHandlerMapping.class)[0]);
            handlerAdapter=(HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);

		}
	}
	/**
	 * 执行action
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	public ModelAndView executeAction(HttpServletRequest request,HttpServletResponse response) throws Exception{
		HandlerExecutionChain chain=handlerMapping.getHandler(request);
		final ModelAndView model=handlerAdapter.handle(request, response, chain);
		return model;
	}
}

异常的解决由提示就知道了,加refresh即可,当然,如果对于构造函数传递“配置文件路径”的,那么可以直接在构造函数传递配置文件,就不需要refresh,原因?whatever,你给配置文件,又不让它去加载,它是鬼才知道你要什么了:)

» 本文链接地址:https://www.xidige.com/893

打开支付宝扫一扫,即可进行扫码打赏哦

扫码支持
扫码打赏,你说多少就多少

标签:

分享到:

扫一扫 在手机阅读、分享本文

上一篇: 下一篇:
评论区0人评论296人参与

电子邮件地址不会被公开。 必填项已用*标注

*

loading

赞助商广告