如何为在源控制器中自动装配的junit测试用例注入servletcontext

时间:2015-12-04 09:08:43

标签: java spring servlets junit

我有一个控制器类,其中servletContext是自动装配的。

@Controller
public class BaseController {
    @Autowired
    private ServletContext servletContext;

protected ServletContext getServletContext() {
        return servletContext;
    }

    public Object getBean(String beanName) {

        ApplicationContext appContext =    WebApplicationContextUtils.getWebApplicationContext(this.servletContext);
        return appContext.getBean(beanName);
    }
}

getBean()中的BaseController被扩展它的子类中的许多方法使用。

当我尝试为子类中的方法(调用getBean())执行jUnit测试用例时,我收到了以下错误。

java.lang.IllegalArgumentException: ServletContext must not be null

运行junit时无法加载web.xml。

有人可以帮忙解释一下如何从JUnit设置servlet上下文吗?如果MockServletContext是解决方案,请提供有关如何将MockServletContext注入控制器中自动装配的servletContext的代码段。

注意: setServletContext()

中没有BaseController

1 个答案:

答案 0 :(得分:0)

您可以使用PowerMock' s WhiteBox设置servletContext。

WhiteBox.setInternalState(controller, "servletContext", yourServletContext);