Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该如何模拟HTTP客户端请求?_Java_Mocking_Jersey_Mockito - Fatal编程技术网

Java 我应该如何模拟HTTP客户端请求?

Java 我应该如何模拟HTTP客户端请求?,java,mocking,jersey,mockito,Java,Mocking,Jersey,Mockito,这是我尝试测试的类(它计算HTTP页面的大小): 当然,这只是一个例子,不是现实生活中的解决方案。现在我要测试这个类: public class LoaderTest { @Test public void shouldCalculateLength() throws Exception { String mockPage = "test page"; // length is 9 Client mockedClient = /* ??? */; Loader moc

这是我尝试测试的类(它计算HTTP页面的大小):

当然,这只是一个例子,不是现实生活中的解决方案。现在我要测试这个类:

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,但任何其他框架都可以,因为我是这里的新手。

与您的问题不太相关,但稍后可能会派上用场,这就是Jersey测试框架。查看泽西岛贡献者之一的博客条目


回到主题,要测试您的
加载程序
类,只需使用从
Client.create()
获取的
客户机
对其进行实例化即可。如果您使用的是Maven,您可以创建一个虚拟测试端点(在src/test/java中)来调用,Jersey测试框架将在Jetty中加载它。

与您的问题不太相关,但稍后可能会派上用场,这就是Jersey测试框架。查看泽西岛贡献者之一的博客条目


回到主题,要测试您的
加载程序
类,只需使用从
Client.create()
获取的
客户机
对其进行实例化即可。如果您使用Maven,您可以创建一个虚拟测试端点(在src/test/java中)来调用,Jersey测试框架将在Jetty中加载它。

您的示例非常复杂,我无法使用最新版本的Jersey运行它,所以我创建了这些类,下面是我如何使用EasyMock模拟它的


字符串mockPage=“测试页”//长度是9

RequestBuilder requestBuilderMock=createNiceControl().createMock(RequestBuilder.class); expect(requestBuilderMock.get((Class)anyObject()).andReturn(“12345678”).anyTimes(); 重播(requestBuilderMock)

WebResource webResourcemock=createNiceControl().createMock(WebResource.class); expect(webResourcemock.accept((字符串[])anyObject()).andReturn(requestBuilderMock.anyTimes(); 重播(webResourcemock)

Client clientMock=createNiceControl().createMock(Client.class); expect(clientMock.resource((URI)anyObject()).andReturn(webResourcemock.anyTimes()); 重播(clientMock)

Loader mockedLoader=新加载器(clientMock); assertEquals((整数)mockPage.length(),mockedLoader.getLength(新URI(“http://example.com")));

如果您试图模拟的任何类没有默认构造函数,那么您应该使用
您的示例非常复杂,我无法用最新版本的jersey运行它,所以我创建了这些类,下面是我如何用EasyMock模拟它的


字符串mockPage=“测试页”//长度是9

RequestBuilder requestBuilderMock=createNiceControl().createMock(RequestBuilder.class); expect(requestBuilderMock.get((Class)anyObject()).andReturn(“12345678”).anyTimes(); 重播(requestBuilderMock)

WebResource webResourcemock=createNiceControl().createMock(WebResource.class); expect(webResourcemock.accept((字符串[])anyObject()).andReturn(requestBuilderMock.anyTimes(); 重播(webResourcemock)

Client clientMock=createNiceControl().createMock(Client.class); expect(clientMock.resource((URI)anyObject()).andReturn(webResourcemock.anyTimes()); 重播(clientMock)

Loader mockedLoader=新加载器(clientMock); assertEquals((整数)mockPage.length(),mockedLoader.getLength(新URI(“http://example.com")));

如果您试图模拟的任何类没有默认构造函数,那么您应该使用

这些链接现在是404'ing:(这些链接现在是404'ing:(RequestBuilder类不适用于WebResource。Builder类,它们不一样(至少现在不一样)@BeepDog现在有了,请下载最新版本RequestBuilder类不适用于WebResource。Builder类,它们不一样(至少目前没有)@BeepDog现在有了,请下载最新版本
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"))
    );
  }
}

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")));