我想对使用Apache CXF编写的RESTful接口进行单元测试。
我使用ServletContext加载一些资源,所以我有:
@Context
private ServletContext servletContext;
如果我在Glassfish上部署它,则会注入ServletContext,它的工作方式与预期的一样。但我不知道如何在我的服务类中注入ServletContext,以便我可以使用JUnit测试来测试它。
我使用Spring 3.0,JUnit 4,CXF 2.2.3和Maven。
答案 0 :(得分:21)
在您的单元测试中,您可能想要创建MockServletContext的实例。
然后,您可以通过setter方法将此实例传递给服务对象。
答案 1 :(得分:15)
从Spring 4开始,单元测试类的@WebAppConfiguration注释就足够了,请参阅Spring reference documentation
@ContextConfiguration
@WebAppConfiguration
public class WebAppTest {
@Test
public void testMe() {}
}
答案 2 :(得分:1)
可能你想用servletContext.getResourceAsStream或者类似的东西来读取资源,因为我已经像这样使用了Mockito:
@BeforeClass
void setupContext() {
ctx = mock(ServletContext.class);
when(ctx.getResourceAsStream(anyString())).thenAnswer(new Answer<InputStream>() {
String path = MyTestClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()
+ "../../src/main/webapp";
@Override
public InputStream answer(InvocationOnMock invocation) throws Throwable {
Object[] args = invocation.getArguments();
String relativePath = (String) args[0];
InputStream is = new FileInputStream(path + relativePath);
return is;
}
});
}