这是我正在尝试测试的类(它计算HTTP页面的大小):
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.*;
public class Loader {
private Client client;
public Loader(Client c) {
this.client = c;
}
public Integer getLength(URI uri) throws Exception {
return c.resource(uri) // returns WebResource
.accept(MediaType.APPLICATION_XML) // returns WebResource.Builder
.get(String.class) // returns String
.length();
}
}
当然它只是一个例子,而不是现实生活中的解决方案。现在我正在尝试测试这个类:
public class LoaderTest {
@Test public void shouldCalculateLength() throws Exception {
String mockPage = "test page"; // length is 9
Client mockedClient = /* ??? */;
Loader mockedLoader = new Loader(mockedClient);
assertEquals(
mockPage.length(),
mockedLoader.getLength(new URI("http://example.com"))
);
}
}
我应该如何模拟com.sun.jersey.api.client.Client
课程?我正在尝试使用Mockito,但任何其他框架都可以,因为我在这里是新手..
答案 0 :(得分:1)
与你的问题没有关系,但可能会在以后派上用场,是泽西测试框架。查看泽西贡献者之一的博客条目;
http://blogs.oracle.com/naresh/entry/jersey_test_framework_makes_it
http://blogs.oracle.com/naresh/entry/jersey_test_framework_re_visited
回到主题,要测试您的Loader
课程,您只需使用从Client
获得的Client.create()
对其进行实例化即可。如果您正在使用Maven,您可以创建一个虚拟测试端点(在src / test / java中)来调用,Jersey Test框架将在Jetty中加载它。
答案 1 :(得分:-1)
你的例子非常复杂,我无法用最新版本的球衣运行它,所以我创建了这些类,这就是我用EasyMock模拟它的方法。
String mockPage = "test page"; // length is 9
RequestBuilder requestBuilderMock = createNiceControl().createMock(RequestBuilder.class);
expect(requestBuilderMock.get((Class < String >) anyObject())).andReturn("12345678").anyTimes();
replay(requestBuilderMock);
WebResource webResourcemock = createNiceControl().createMock(WebResource.class);
expect(webResourcemock.accept((String[]) anyObject())).andReturn(requestBuilderMock).anyTimes();
replay(webResourcemock);
Client clientMock = createNiceControl().createMock(Client.class);
expect(clientMock.resource((URI) anyObject())).andReturn(webResourcemock).anyTimes();
replay(clientMock);
Loader mockedLoader = new Loader(clientMock);
assertEquals((Integer) mockPage.length(), mockedLoader.getLength(new URI("http://example.com")));
如果您尝试模拟的任何类没有默认构造函数,那么您应该使用 http://easymock.org/api/easymock/3.0/org/easymock/IMockBuilder.html#withConstructor%28java.lang.Class...%29