我需要为在Tomcat中运行的相当复杂的应用程序编写一个jUnit测试。
我写了一个构建Spring环境的类。
private static ApplicationContext
springContext = null;
springContext = new ClassPathXmlApplicationContext(
new String[] {"beans"....});
在应用程序中有一个电话:
public class myClass implements ServletContextAware {
.... final String folder = **servletContext.getRealPath**("/example"); ...
}
会破坏所有内容,因为ServletContext
为空。
我已经开始构建一个模拟对象:
static ServletConfig servletConfigMock = createMock(ServletConfig.class);
static ServletContext servletContextMock = createMock(ServletContext.class);
@BeforeClass
public static void setUpBeforeClass() throws Exception {
expect(servletConfigMock.getServletContext())
.andReturn(servletContextMock).anyTimes();
expect(servletContextMock.getRealPath("/example"))
.andReturn("...fulllpath").anyTimes();
replay(servletConfigMock);
replay(servletContextMock);
}
是否有一个简单的方法来注入ServletContext
或者在jUnit测试的运行时使用部署描述符启动Tomcat?
我正在使用:Spring,Maven,Tomcat 6和EasyMock用于模拟对象。
答案 0 :(得分:3)
您真正想要的是测试网络层。 有几种方法可以做到:
MockServletContext
。这是最好的方法 - 查看链接文档以了解如何操作。每当您想在测试中注入某些内容时,请使用ReflectionTestUtils
复杂性来自于Web层不太适合单元测试的事实。它更像是功能测试的主题。
如果有些方法似乎适合单元测试,它们可能属于服务层。他们不应该依赖ServletContext