2

这是我要测试的类(它计算 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,但任何其他框架都可以,因为我是这里的新手..

4

2 回答 2

1

Jersey Test Framework 与您的问题并不真正相关,但以后可能会派上用场。查看泽西岛贡献者之一的这些博客条目;

http://blogs.oracle.com/naresh/entry/jersey_test_framework_makes_it

http://blogs.oracle.com/naresh/entry/jersey_test_framework_re_visited

回到主题,要测试你的Loader类,你可以简单地用一个ClientClient.create(). 如果您使用 Maven,您可以创建一个虚拟测试端点(在 src/test/java 中)来调用,Jersey Test 框架将在 Jetty 中加载它。

于 2010-10-11T12:46:35.620 回答
-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

于 2010-10-14T08:26:56.023 回答