java - 我应该如何模拟 Jersey HTTP 客户端请求?

标签 java mocking jersey mockito

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

最佳答案

Jersey Test Framework 与您的问题没有太大关系,但稍后可能会派上用场。查看其中一位 Jersey 贡献者的这些博客条目;

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

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

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

关于java - 我应该如何模拟 Jersey HTTP 客户端请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3906035/

相关文章:

java - Flyway 可以与非托管数据库对象共存吗?

Java 枚举值

java - 在给定整数的叉积中生成一行

Python单元测试模拟,获取模拟函数的输入参数

unit-testing - 在 Racket 中模拟依赖行为

node.js - 如何模拟来自 http.request 的响应(nodejs、jasmine、sinon)

java - Spring CGLIB AopProxy 干扰 Jersey 资源方法参数验证

java - 使用 Jersey 上传文件时设置文件大小限制

java - 使用 Jersey 进行客户端身份验证

java - 如何传递整数数组testng.xml