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”的“不存在”用户,我仍然有点迷茫。自动生成的测试将针对某些假设进行断言,但调用的代码将是“生产代码”,因此我必须使用某种伪实现来返回固定响应?您将删除对任何服务的任何真正调用