Spring cloud contract Spring云契约中的契约与功能

Spring cloud contract Spring云契约中的契约与功能,spring-cloud-contract,Spring Cloud Contract,我知道契约测试用于测试应用程序之间的契约,而不是用作业务特性的检查工具。为积极情景写一份合同,为消极情景写一份合同 但是想象一下下面的例子: // contract (#1) org.springframework.cloud.contract.spec.Contract.make { request { method 'GET' url 'client/1' } response { status 200 body([ id: 1

我知道契约测试用于测试应用程序之间的契约,而不是用作业务特性的检查工具。为积极情景写一份合同,为消极情景写一份合同

但是想象一下下面的例子:

// contract (#1)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/1'
  }
  response {
    status 200
    body([
        id: 1
        name: "Barbara"
        address: "Park Avenue 1"
    ])
  }
}


// contract (#2)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/9999'
  }
  response {
    status 404
    body([])
  }
}


// contract (#3)

org.springframework.cloud.contract.spec.Contract.make {
  request {
    method 'GET'
    url 'client/!^&(^%@'
  }
  response {
    status 400
    body([])
  }
}
我的积极案例是当找到客户时(#1)。 我可以在url中传递变量吗?这在SCC中可能吗?我可以在这里使用正则表达式来验证输入吗

我觉得需要两种否定的情况:--用户不存在(#2),--请求无效(#3)

这是合理的还是我忽略了消费者驱动合同的要点?你能在这些合同上写些什么吗


我在推理制作人方面也有问题。如果上述内容在某种程度上是合理的,那么在生产者方面,我将对合同进行(自动生成)测试,但我如何区分现有客户和未存在的客户?我知道合同关心真实数据是没有意义的。。。但是当用户不存在时,如何测试契约(#2)?

这些都是很好的问题!!我将试着逐一回答他们

1是的,您可以传递变量和正则表达式。如果您有一个正则表达式和一个具有具体值的触点,那么您必须使用优先级来定义顺序。 2我认为#3我不会把它放在合同中,而是用WireMock或其他http服务器存根手动处理它。我会模拟不同的异常并确保能够处理它们。在谈论技术例外时。如果producer应用程序由于业务原因可以发送错误,那么我想我会为此写一个联系人。我认为在这种情况下#2是一个例外,因为URL存在,但没有客户端。
至于制作人方面。。。为客户端选择一个名称。例如“不存在”,并返回404。将优先级设置为1。然后用正则表达式创建另一个正则表达式,并将优先级设置为5或其他值。

我理解,技术例外情况有点超出合同范围。我希望表达我的应用程序将返回的所有返回代码。有很多已定义的返回http代码,但我的应用程序将只返回少数,我认为这是一个执行“契约”的好地方。关于将返回“404”的“不存在”用户,我仍然有点迷茫。自动生成的测试将针对某些假设进行断言,但调用的代码将是“生产代码”,因此我必须使用某种伪实现来返回固定响应?您将删除对任何服务的任何真正调用