由于自定义框架依赖性,我无法升级到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上下文,但是如何通过我的依赖约束实现这个呢?
答案 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;
}
}
您需要更改路径以匹配您自己的路径,或以某种方式传递它们。