spring-cloud - 使用 Spring Cloud Contracts 时,为什么生产者要创建合约?
问题描述
我一直在玩 Spring Cloud Contracts。到目前为止,这是我对工作流程的理解。
在服务器端
- 编写合约(在 groovy 或 yaml 中)
- 自动生成测试(使用 gradle 插件)
- 设置基类,为控制器进行适当的设置设置
- 运行自动生成的测试
- 将生成的存根 jar 文件发布到某个本地存储库(其中包含内置的wiremock 服务器,带有请求/响应)
在客户端
- 下载存根 jar 文件
- 针对这个存根 jar 编写测试。使用 stubrunner 验证响应
我不明白的是这个消费者是如何驱动的?合同似乎来自生产者,消费者似乎在被动地测试生产者发布的内容(使用存根 jar 文件)。生产者可能不小心没有更新合约,而是做出重大更改。这可能导致客户端测试通过,即使它应该失败。这是真的还是我误解了从消费者方面创建合同的步骤
想法?
解决方案
消费者驱动合同(CDC) 开发基本上是扩展至生产者-消费者应用程序的测试驱动开发(TDD)。由于它是 TDD - 测试应该首先出现,然后是实现。而且由于它是消费者驱动的 -消费者为生产者创建测试。
所以让我们假设我们有一个 Producer 和一个 Consumer 以及一些feature
需要实现的新功能。在 CDC 中,工作流程如下(您可以在官方文档中找到更多信息)。
在消费者方面:
- 为该功能编写缺少的实现
- 在本地克隆Producer存储库
- 在Producer的存储库中本地定义合约(并为其自动生成单元测试)
- 运行集成测试(在消费者方面)
- 提交拉取请求
在生产者方面:
- 接管拉取请求(测试已经由cosumer生成)
- 编写缺失的实现(TDD 风格)
- 部署您的应用
- 在线工作
现在这一切都说得通了,因为消费者为新功能编写合同(但在生产者的存储库中)——我们有一个消费者驱动的方法。
推荐阅读
- tensorflow - 在神经网络框架中是否有前向映射/扭曲的实现?
- c++ - C++ setenv 解析其他变量
- c# - 使用 SMO 复制数据库但不传输所有数据
- jenkins - 我想在job2中使用job1工作区(使用jenkins管道cd到job1工作区)但我收到错误
- java - javafx 场景构建器滚动窗格
- ruby-on-rails - NoMethodError:未定义的方法`define_instance_method'
- maven - Wildfly 17 服务器提供的 Maven 依赖项
- node.js - 出现错误:Node Sass 找不到当前环境的绑定:Linux 64-bit with Node.js 11.x
- amazon-web-services - 如果我超过 AWS SES 上的每秒电子邮件配额会怎样?
- android - 无法将 Map<> 存储到 Firebase 存储中