我正在处理spring契约,并且有一个用例,当缺少几个查询参数时,我希望响应为BAD_REQUEST,当所有强制查询参数都出现时,我希望响应为。为了实现这一点,我有不同的契约(groovy文件)来满足每个这样的请求/响应。但是,当我从使用者(有/没有查询参数)测试时,所有这些都只匹配到一个契约,无论查询参数是否存在。
下文所列合同
这两个查询参数都不存在
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数B不存在
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数存在,响应正常,
Contract.make {
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}
问题:
发布于 2019-01-24 01:22:28
你们的合同是互相延长的。每一种都比另一种更具体。您必须使用priority()
方法来说明哪一个比另一个更具体。例如,最小的具体值应该具有最高的优先级- priority(100)
。最- priority(1)
.
这两个查询参数都不存在。
Contract.make {
priority(100)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate")
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BothFieldsNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数B不存在
Contract.make {
priority(50)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath("/check/validate") {
queryParameters {
parameter 'a' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(400)
"body" "shouldReturnBadRequest400BNotPresent"
headers {
contentType('application/json')
}
}
}
查询参数存在,响应也正常。
Contract.make {
priority(10)
description("Test to see if authorisation works")
request {
method 'GET'
urlPath('/check/validate') {
queryParameters {
parameter 'a' : equalTo("AUTHORISED")
parameter 'b' : value(regex(nonBlank()))
}
}
headers {
contentType('application/json')
}
}
response {
status(200)
"body" "shouldReturn200OkValidRequest"
headers {
contentType('application/json')
}
}
}
https://stackoverflow.com/questions/54342455
复制