在Spring 3.1 Junit测试中获取WebApplicationContext

时间:2014-12-06 00:26:18

标签: spring junit

由于自定义框架依赖性,我无法升级到Spring 3.2+。我被困在3.1.x.我试图在Spring JUnit测试中获取WebApplicationContext,如下所示:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/spring/context.xml")
public class WebIntegrationTest {

    @Autowired
    private WebApplicationContext ctx;

正如所料,这不会加载WebApplicationContext。

我意识到在Spring 3.2或更高版本中我可以使用@WebAppConfiguration告诉Spring我想要提供一个Web上下文,但是如何通过我的依赖约束实现这个呢?

1 个答案:

答案 0 :(得分:2)

我也被困在3.1上,至少在我能够对此代码进行足够的测试进行升级之前 - 但是在我能够获得有效的WebApplicationContext之前无法测试......

构建WebApplicationContext并不是一件难事,只是一整天的反复试验。

所以,对于像

这样的测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = MyLoader.class,
    locations =
    {
    "file:WEB-INF/springcontexts/spring-security-common.xml",
    "file:WEB-INF/springcontexts/webapp-common.xml"
})
public class LoginIntegrationTest {

你可以定义

public class MyLoader implements ContextLoader {

    @Override
    public String[] processLocations(Class<?> clazz, String... locations) {
        return locations;
    }

    @Override
    public ApplicationContext loadContext(String... locations) throws Exception {
        XmlWebApplicationContext result = new XmlWebApplicationContext();
        MockServletContext servletContext = new MockServletContext("target/webapp", new FileSystemResourceLoader());
        result.setServletContext(servletContext);
        result.setServletConfig(new MockServletConfig(servletContext));
        result.setConfigLocations(locations);
        result.refresh();
        return result;
    }
}

您需要更改路径以匹配您自己的路径,或以某种方式传递它们。