【问题标题】:How to mock a HTTP response如何模拟 HTTP 响应
【发布时间】:2017-10-09 13:22:36
【问题描述】:

我是 Java 单元测试的新手。我面临的问题是我需要开发一个 JUnit 测试来向服务器 API 发送请求来测试两种方法:addUserdeleteUser。如果我想从服务器添加/删除一个用户,我需要从服务器获取一个认证令牌;但是,由于服务器端的一些问题,我目前无法获得有效的令牌。所以我想到的是模拟服务器的行为,如果服务器接收到来自单元测试的请求,它可以响应一个 JSON 数据,指示添加/删除用户操作的状态。

因为我对 JUnit 完全陌生。我不知道如何实施该操作。所以我的问题是应用模拟的最简单方法可能是什么?

【问题讨论】:

  • Mockito 是您应该寻找的工具。有一篇关于这个的文章stackoverflow.com/questions/22714359/…
  • 之前已经回答过类似的问题:stackoverflow.com/questions/606352/…
  • 您实际测试的是什么?你说你想测试服务器 API 的两种方法。然后你想用一个模拟替换服务器。如果您这样做,那么您将不再测试服务器 API。您确实需要清楚地知道要测试系统的哪些部分,以及要模拟哪些部分。
  • 如果你真的想测试向服务器发送 HTTP 消息的部分,很大程度上取决于你使用的库。例如,如果您使用 Spring 的 RestTemplate,那么您可以使用 Spring 的模拟服务器来模拟通信。其他库可能需要其他工具。如果你能告诉我们你正在使用什么以及你想测试什么,那将有助于回答......
  • @dopatraman 的要求听起来不像是单元测试,而是集成测试,你对赏金答案的期望是什么?

标签: java unit-testing junit mockito


【解决方案1】:
HttpResponse httpResponse = mock(HttpResponse.class);

看到这个:Mocking Apache HTTPClient using Mockito

【讨论】:

  • 这对 OP 有帮助,但对我的情况没有多大帮助。您需要模拟大量内容以使其具有内容等。
【解决方案2】:

你可以在你的单元测试中启动一个 test-http-server。 有几个框架可以做到这一点。例如MockserverWiremock

【讨论】:

    【解决方案3】:

    您可以使用HTTP Unit Testing from Google 来完成。

    为了生成简单的 HTTP 响应,您可以使用以下代码:

    HttpTransport transport = new MockHttpTransport();
    HttpRequest request = transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL);
    HttpResponse response = request.execute();
    

    您还可以通过覆盖 MockHttpTransport 类的实现来自定义您的测试。

    您可以查看here 的回购以获取更多详细信息。我认为它可能适合你。

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2020-02-04
      • 1970-01-01
      • 2018-08-11
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多