【问题标题】:Spring integration testing for REST call of some other Service其他服务的 REST 调用的 Spring 集成测试
【发布时间】:2019-02-14 13:11:12
【问题描述】:

我一直在网上搜索它,但我发现的大多数示例都有在同一个项目中返回的 rest 调用逻辑,但是如果你想测试你正在使用的其他服务的 rest 调用怎么办它在您的项目中(从 REST API 调用 REST API)

有没有办法整合这个。对某个外部服务的 REST 调用进行集成测试

正常的集成测试方法可以在这种情况下工作吗?

【问题讨论】:

    标签: spring-boot integration-testing spring-test


    【解决方案1】:

    你考虑过使用 Spring Cloud Contract (http://cloud.spring.io/spring-cloud-contract/) 吗?这是一个专门为此目的而设计的项目。

    您拥有 API 的生产者和消费者。 Spring Cloud Contract 和 Consumer Driven Contract 方法的想法是这样的,即消费者建议生产者的 API 应该是什么样子。他们可以对 API 进行原型设计,而无需在生产者端编写任何生产代码。原型制作以“合同”的形式进行。它可以是 Groovy 或 YAML 文件(您当然可以扩展框架)。合同的处理会导致创建一个 WireMock 存根,消费者可以在他们的集成测试中利用它。换句话说,就好像生产者会准备一个小的、虚假的代码实现来进行测试。因此,消费者可以针对生产者端的存根运行他们的集成测试。存根是从合同中生成的。假设消费者 X 想要以这样一种方式使用 API,即如果将 GET 请求发送到 /foo,它将以文本 bar 进行响应。然后,当在/foo 端点被点击时,将生成一个以bar 文本响应的存根。

    现在,生产者重复使用相同的合约来生成测试,以验证他们的 API 是否满足合约中的要求。还记得 GET @/foo 会以 bar 示例响应吗?如果生产者尝试构建它的项目并且没有这样的端点,它的构建将被破坏。 Spring Cloud Contract 框架生成测试来断言 API 是否按应有的方式工作。只有在生产者修复缺失的实现之后,构建才会通过。

    这是消费者驱动的合同方法。您还可以采用生产者驱动的方法,其中 API 的生产者只定义合同,而不与消费者沟通他们每个人如何使用 API。

    贵重物品链接:

    注意:我是 Spring Cloud Contract 的维护者。

    【讨论】:

    • 感谢 Marcin,看起来这就是我想要的。有一个 docs.pact.io 。 PACT 也是为了这个目的,我认为这也完全填充了同样的东西,被我的一些朋友使用
    • 正确,PACT 也可用于此目的。 Spring Cloud Contract 也适用于 PACT。 PACT 要求您使用 Pact Broker 并支持消费者合同方法。无论您选择哪种框架,都绝对应该使用合同测试方法。
    猜你喜欢
    • 2015-10-03
    • 2015-08-02
    • 2018-11-19
    • 2015-06-24
    • 2016-01-06
    • 2015-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    相关资源
    最近更新 更多