【发布时间】:2018-12-24 22:06:04
【问题描述】:
我一直在玩 Spring Cloud Contracts。到目前为止,这是我对工作流程的理解。
在服务器端
- 编写合约(在 groovy 或 yaml 中)
- 自动生成测试(使用 gradle 插件)
- 设置基类,为控制器进行适当的设置设置
- 运行自动生成的测试
- 将生成的 stubs jar 文件发布到某个本地 repo(其中包含内置的 wiremock 服务器,带有请求/响应)
在客户端
- 下载存根 jar 文件
- 针对这个存根 jar 编写测试。使用 stubrunner 验证响应
我不明白的是这个消费者是如何驱动的?合同似乎来自生产者,消费者似乎在被动地测试生产者发布的内容(使用存根 jar 文件)。生产者可能不小心没有更新合约,而是做出重大更改。这可能导致客户端测试通过,即使它应该失败。这是真的还是我误解了从消费者方面创建合同的步骤
想法?
【问题讨论】:
-
您所描述的是生产者,而不是消费者,驱动。如果生产者进行了重大更改并且合约没有更新,它将无法通过验证。
-
我的困惑在于工作流程,在我看到的所有示例中,生产者生成合同,消费者只是针对这个 jar 文件执行测试。如果消费者端的测试失败,是否期望消费者团队与生产者团队交谈并传达失败?在我看来,这不是消费者驱动的。
-
为什么会看起来是消费者驱动的?它不是;正如你所说,生产者生成合同,生产者只是针对它进行测试。
-
但是 Spring Cloud 合约不是应该促进 Consumer Driven Contract 测试吗? CDC 的主要优势之一是通过自动化测试让生产者知道他们何时引入了重大更改。让每个消费者负责确保他们与生产者兼容似乎违反了 CDC(很有可能,我可能弄错了 CDC,在这种情况下请纠正我)
标签: spring-cloud consumer spring-cloud-contract