泽西客户端测试

Jersey client testing


我有一个 Jersey 客户端,它对某些黑盒服务执行 post 请求。
我还启用了 POJO 映射功能。
我已经进行了集成测试,他们正在调用真正的黑盒服务。
现在我需要在不调用真正的黑盒服务的情况下测试我的应用程序。
我的问题是:我如何测试这个 Jersey 客户端?我的意思是:如何在不调用真正的黑盒服务的情况下测试 Jersey 客户端?
也许有可能在测试中模拟 JSON 响应?

环境:jersey-client 和 jersey-json 版本 - 1.19.1。

您可以使用 LoggingFilter 记录请求,以确保您的请求符合您的估计。对于 运行 你的测试,你可以使用 http://mockable.io/.

P.S。不要忘记用 MockableIO 的 URL 替换 Webtarget URL。

您可以尝试 Karate,它最近引入了一种为 JSON 响应创建简单模拟的方法。这是一个例子:

https://gist.github.com/ptrthomas/35ef9d40623cbeade7388b2cbb29a3b1

虽然上面的示例是 "smart" 模拟,但创建 hard-coded 模拟非常容易,这里是一个示例:https://github.com/intuit/karate/blob/master/karate-netty/src/test/java/com/intuit/karate/mock/_mock.feature

您可以使用 read 关键字轻松读取 JSON 中的文件。

我已经对我的问题进行了调查。提到的调查结果是这样的事实:

  1. 我还没有找到 features/mechanisms/etc。在不真正调用服务器的情况下测试 Jersey 客户端(在我的例子中 - 黑盒服务)。
  2. Jersey 测试框架提供用于测试 Jersey 服务器 的功能,但没有用于测试 Jersey 客户端
  3. 的功能
  4. 在没有服务器的情况下测试客户端的唯一解决方案是按以下方式重构我的代码:将逻辑分成两个阶段。第一阶段:使用 Jersey 获得 JSON 响应。第二阶段:获得 JSON 响应(我们在第一阶段获得)并将其转换为所需的对象。通常,您将得到下一个代码:
    Class< String > jsonResposeClass = String.class; String jsonResponse = post( yourRequest, jsonResposeClass ); ObjectMapper mapper = new ObjectMapper(); YourResponseBean bean = mapper.readValue( jsonResponse , responseClass );
    上面的解决方案将使您有可能使用模拟库,如 Mockito 和执行 post 请求的模拟方法。
    如果您发现任何其他 solution/feature/special mechanism/etc 也可以在这种情况下提供帮助 - 请分享 :)