对于最新的稳定版本,请使用 spring-cloud-contract 5.0.0!spring-doc.cadn.net.cn

我如何为合同提供动态价值?

与存根相关的最大挑战之一是其可重复使用性。只有当这些方法能够被广泛使用时,才能发挥其目的。 请求和响应元素的硬编码值(如日期和ID)通常使得这变得困难。 请考虑以下 JSON 请求:spring-doc.cadn.net.cn

{
    "time" : "2016-10-10 20:10:15",
    "id" : "9febab1c-6f36-4a0b-88d6-3b6a6d81cd4a",
    "body" : "foo"
}

现在考虑以下 JSON 响应:spring-doc.cadn.net.cn

{
    "time" : "2016-10-10 21:10:15",
    "id" : "c4231e1f-3ca9-48d3-b7e7-567d55f0d051",
    "body" : "bar"
}

想象一下,设定正确的时间字段(假设该内容由 通过改变系统中的时钟或提供数据提供者的存根实现来实现数据库。同样的话题也相关 前往身份证田。你可以创建一个 stubed 实现的 UUID 生成器,但这样做意义不大。spring-doc.cadn.net.cn

所以,作为消费者,你应该发送一个与任何时间形式或UUID匹配的请求。这样,你的系统 一切正常,无需你删除任何数据即可生成数据。假设在上述情况下 JSON,最重要的部分是身体田。你可以专注于这一点,并为其他领域提供匹配。换句话说, 你希望存根能按以下方式工作:spring-doc.cadn.net.cn

{
    "time" : "SOMETHING THAT MATCHES TIME",
    "id" : "SOMETHING THAT MATCHES UUID",
    "body" : "foo"
}

至于回应,作为消费者,你需要一个具体的价值来运营。 因此,以下 JSON 是有效的:spring-doc.cadn.net.cn

{
    "time" : "2016-10-10 21:10:15",
    "id" : "c4231e1f-3ca9-48d3-b7e7-567d55f0d051",
    "body" : "bar"
}

在之前的部分中,我们从合同中生成了测试。所以,从制片人角度来看,情况是这样的 完全不同。我们解析提供的契约,在测试中,我们希望向你的端点发送真实请求。 所以,对于制作人的需求,我们不能有任何匹配。我们需要具体的数值,使得 制作人后台是可以工作的。因此,以下 JSON 是有效的:spring-doc.cadn.net.cn

{
    "time" : "2016-10-10 20:10:15",
    "id" : "9febab1c-6f36-4a0b-88d6-3b6a6d81cd4a",
    "body" : "foo"
}

另一方面,从合同有效性的角度看,答复不一定必须 包含具体值时间身份证.假设你在生产方生成这些。又是你 必须做大量的打桩检查,确保你总是返回相同的数值。这就是为什么,从制片人角度来看, 你可能需要以下回答:spring-doc.cadn.net.cn

{
    "time" : "SOMETHING THAT MATCHES TIME",
    "id" : "SOMETHING THAT MATCHES UUID",
    "body" : "bar"
}

那么,你如何为消费者提供匹配,为生产者提供具体价值(以及在其他时间为相反)? Spring Cloud 合约让你提供动态价值。这意味着两者的情况可能不同 沟通的各个方面。spring-doc.cadn.net.cn

你可以在合同DSL部分了解更多相关内容。spring-doc.cadn.net.cn

阅读与JSON相关的Groovy文档,了解如何作 合理组织请求和响应文本。