在单元测试中初始化WebApplicationContext

时间:2012-12-27 13:54:43

标签: spring

我有一个实用工具方法,我想为其编写单元测试。由于此实用程序在webapp下运行,因此它旨在从WebApplicationContext获取Spring bean。(遵循代码不在单元测试下) 动作bean类

private IUnitBiz unitBiz;
public UnitBean()
{
    unitBiz = CommonUtils.getBean(IUnitBiz.class);
}
在CommonUtils.class中

public static ApplicationContext getWebApplicationContext() {
        return FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
    }

    public static <T> T getBean(Class<T> beanType) {
        return getWebApplicationContext().getBean(beanType);
    }

------------------在单元测试中----------------

在单元测试中,它返回null,如何为我的单元测试初始化​​WebApplicationContext或getBean? 当我的新动作bean时,getBean方法返回null。

2 个答案:

答案 0 :(得分:2)

EasyMock可能是一个解决方案。

示例:

WebApplicationContext mockWebApplicationContext = EasyMock.createMock(WebApplicationContext.class);
MockServletContext mockServletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
                                    mockWebApplicationContext);

EasyMock.expect(mockWebApplicationContext.getServletContext()).andReturn(mockServletContext).anyTimes();

答案 1 :(得分:0)

你可以让你的测试用例扩展org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests。

通过扩展此类,您可以访问org.springframework.context.ApplicationContext的实例,该实例可以在您的实用程序方法中使用和传递... 实际上,我不知道你是否正在使用但你应该尝试spring-test,这是在JUnit测试中使用Spring的最佳方式,它与框架无关(它可以与Wicket,JSF等一起使用)。

首先应该在Maven pom.xml中包含以下依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.0.0.RELEASE</version>
    <scope>test</scope>
</dependency>