此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 spring-cloud-contract 4.1.5spring-doc.cadn.net.cn

Spring Cloud Contract 简介

Spring Cloud Contract 将 TDD 移至软件体系结构级别。 它允许您执行使用者驱动和生产者驱动的合同测试。spring-doc.cadn.net.cn

历史

在成为 Spring Cloud Contract 之前,这个项目被称为 Accurest。 它由来自 (Codearte) 的 Marcin GrzejszczakJakub Kubrynski 创建。spring-doc.cadn.net.cn

0.1.0发布于 2015 年 1 月 26 日,并随着1.0.0于 2016 年 2 月 29 日发布。spring-doc.cadn.net.cn

为什么需要它?

假设我们有一个由多个微服务组成的系统,如下所示 图片显示:spring-doc.cadn.net.cn

微服务架构

测试问题

如果我们想测试前面图片左上角的应用程序 部分来确定它是否可以与其他服务通信,我们可以执行 两件事:spring-doc.cadn.net.cn

两者都有其优点,但也有很多缺点。spring-doc.cadn.net.cn

部署所有微服务并执行端到端测试spring-doc.cadn.net.cn

在单元测试和集成测试中模拟其他微服务spring-doc.cadn.net.cn

为了解决上述问题,创建了 Spring Cloud Contract。主要思想是 为您提供非常快速的反馈,而无需设置 整个微服务世界。如果您处理存根,那么您唯一需要的应用程序 是您的应用程序直接使用的值。下图显示了这种关系 of stub 添加到应用程序:spring-doc.cadn.net.cn

存根服务

Spring Cloud Contract 可以确定您使用的存根是 由您调用的服务创建。此外,如果您可以使用它们,则意味着它们 对制片人一方进行了测试。简而言之,您可以信任这些存根。spring-doc.cadn.net.cn

目的

Spring Cloud Contract 的主要目的是:spring-doc.cadn.net.cn

默认情况下,Spring Cloud Contract 作为 HTTP 服务器存根与 Wiremock 集成。spring-doc.cadn.net.cn

Spring Cloud Contract 的目的不是开始编写业务 合同中的特征。假设我们有一个欺诈检查的业务使用案例。如果 用户可能由于 100 种不同的原因而成为欺诈者,我们假设您会创建两个 合同,一个用于 positive 情况,一个用于 negative 情况。Contract 测试包括 用于测试应用程序之间的协定,而不是模拟完整行为。

什么是合同?

作为服务的消费者,我们需要定义我们到底想要实现什么。我们需要 制定我们的期望。这就是我们编写合同的原因。换句话说,合约是 关于 API 或消息通信外观的协议。请考虑以下示例:spring-doc.cadn.net.cn

假设您要发送一个请求,其中包含客户公司的 ID 和 它想向我们借款的金额。您还需要将其发送到/fraudcheckURL 使用 这PUT方法。下面的清单显示了一个合同,用于检查客户是否应该 在 Groovy 和 YAML 中都标记为欺诈:spring-doc.cadn.net.cn

预计 Contract 来自受信任的来源。切勿下载来自不受信任位置的合约,也不应与之交互。