【问题标题】:Jersey client testing泽西客户测试
【发布时间】:2018-02-26 09:37:10
【问题描述】:


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

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

【问题讨论】:

    标签: java rest testing jersey


    【解决方案1】:

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

    附:不要忘记用 MockableIO 的 URL 替换 Webtarget URL。

    【讨论】:

    • 嗯...由于我的问题的错误,有点误解。现在我已经纠正了我帖子中的错误,现在可以了。问题是:如何在不调用真正的黑盒服务的情况下测试我的 Jersey 客户端?
    【解决方案2】:

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

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

    虽然上面的示例是一个“智能”模拟,但创建硬编码模拟非常容易,这里有一个示例:https://github.com/intuit/karate/blob/master/karate-netty/src/test/java/com/intuit/karate/mock/_mock.feature

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

    【讨论】:

      【解决方案3】:

      我已就我的问题进行了调查。提到的调查导致了这样的事实:

      1. 我还没有找到功能/机制/等。在没有真正调用服务器的情况下测试 Jersey 客户端(在我的例子中 - 黑盒服务)。
      2. Jersey 测试框架提供了用于测试 Jersey 服务器 的功能,但没有用于测试 Jersey 客户端 的功能
      3. 在没有服务器的情况下测试客户端的唯一一种解决方案是按以下方式重构我的代码:将逻辑拆分为两个阶段。第一阶段:使用 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 请求的模拟方法。
        如果您发现任何其他解决方案/功能/特殊机制/等也可以在这种情况下提供帮助 - 请分享:)

      【讨论】:

        猜你喜欢
        • 2019-03-30
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 1970-01-01
        • 2014-05-22
        • 2014-11-30
        • 1970-01-01
        相关资源
        最近更新 更多