Java 如何为源代码控制器中自动连接的junit测试用例注入servletcontext

Java 如何为源代码控制器中自动连接的junit测试用例注入servletcontext,java,spring,servlets,junit,Java,Spring,Servlets,Junit,我有一个控制器类,其中servletContext是自动连接的 @Controller public class BaseController { @Autowired private ServletContext servletContext; protected ServletContext getServletContext() { return servletContext; } public Object getBean(String

我有一个控制器类,其中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);
    }
}
BaseController
中的
getBean()
被扩展它的子类中的许多方法使用

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

java.lang.IllegalArgumentException: ServletContext must not be null
运行junit时无法加载web.xml

有人能帮忙解释一下如何从JUnit设置servlet上下文吗?如果解决方案是
MockServletContext
,请提供一个代码片段,说明如何将
MockServletContext
注入控制器中的自动连接servletContext


注意:
BaseController

中没有
setServletContext()
您可以使用PowerMock设置servletContext


不是问题的答案,但不应在控制器中使用ApplicationContext。相反,只需将bean注入控制器。@stefan Birkner:我同意。我不应该在控制器中使用ApplicationContext。但它是一个现有的源代码,由于项目限制,现在不应该修改它。但问题是servletcontext在运行jUnit测试用例时将显示为null。所以请让我知道从junit注入servletcontext的步骤。上述方法仅适用于静态字段。但如上面代码所示,servletContext是一个私有的非静态字段。因此,请建议一种从jUnit注入servletContext的方法,源文件中的servletContext是@Autowired private fieldIt用于非静态字段。(这就是第一个参数是对象的原因。)为什么您认为它只适用于静态字段?
WhiteBox.setInternalState(controller, "servletContext", yourServletContext);