Spring 云合同中的合同与功能
Contracts vs Features in Spring Cloud Contract
我了解合同测试用于测试应用程序之间的合同,而不是用作业务功能的检查器。为积极情况写一份合同,为消极情况写一份合同。
但想象一下以下示例:
// 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 服务器存根手动处理它。我会模拟不同的异常并确保我可以处理它们。在谈论技术异常时。如果生产者应用程序由于业务原因可以发送错误,那么我想我会为此写一个联系人。我认为在这种情况下 #2 是一个例外,因为 URL 存在但没有客户端。
至于制作方...给客户端取个名字。例如“不存在”,对于那个 return 404。将优先级设置为 1。然后使用正则表达式创建另一个并将优先级设置为 5 或 sth。
我了解合同测试用于测试应用程序之间的合同,而不是用作业务功能的检查器。为积极情况写一份合同,为消极情况写一份合同。
但想象一下以下示例:
// 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 服务器存根手动处理它。我会模拟不同的异常并确保我可以处理它们。在谈论技术异常时。如果生产者应用程序由于业务原因可以发送错误,那么我想我会为此写一个联系人。我认为在这种情况下 #2 是一个例外,因为 URL 存在但没有客户端。
至于制作方...给客户端取个名字。例如“不存在”,对于那个 return 404。将优先级设置为 1。然后使用正则表达式创建另一个并将优先级设置为 5 或 sth。