我正在尝试在提供者端进行验证,但出现错误-
验证DataConsumer和DataProvider之间的协定 [使用文件pact / DataConsumer-DataProvider.json] 给定一些状态 对json数据的请求 请求失败-输入字符串:“ \ null”
不确定我在这里想念什么。
我的Pojo-
@EqualsAndHashCode
@RequiredArgsConstructor
@Builder(toBuilder = true)
@JsonDeserialize(builder = DataModel.DataModelBuilder.class)
public class DataModel {
@JsonProperty("name")
private final String name;
@JsonProperty("price")
private final double price;
}
条约-
{
"provider": {
"name": "DataProvider"
},
"consumer": {
"name": "DataConsumer"
},
"interactions": [
{
"description": "a request for json data",
"request": {
"method": "GET",
"path": "/get/ice/2.0"
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset\u003dUTF-8"
},
"body": {
"price": 10,
"name": "some name"
},
"matchingRules": {
"header": {
"Content-Type": {
"matchers": [
{
"match": "regex",
"regex": "application/json(;\\s?charset\u003d[\\w\\-]+)?"
}
],
"combine": "AND"
}
}
},
"generators": {
"body": {
"$.name": {
"type": "ProviderState",
"expression": "\\${name}",
"dataType": "STRING"
},
"$.price": {
"type": "ProviderState",
"expression": "\\${price}",
"dataType": "FLOAT"
}
}
}
},
"providerStates": [
{
"name": "some state"
}
]
}
],
"metadata": {
"pactSpecification": {
"version": "3.0.0"
},
"pact-jvm": {
"version": "3.6.15"
}
}
}
测试-
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Provider("DataProvider")
@PactFolder(value = "pact")
public class ContractVerificationTest {
@TestTemplate
@ExtendWith(PactVerificationSpringProvider.class)
void pactVerificationTestTemplate(PactVerificationContext context) {
context.verifyInteraction();
}
@State("some state")
void testPact() {
}
}
代码-
答案 0 :(得分:0)
您不会在提供者测试中从提供者状态注释中返回值(名称,价格)(当前无所作为),因此当Pact尝试在请求中动态替换值时,它们为空。
您实际上是否真的需要提供商首先生成它们?
请参阅 https://pactflow.io/blog/injecting-values-from-provider-states/中提供了有关如何使用和修复的详细示例。
更新 可能是您要对参数进行两次转义吗?
在示例中:
.queryParameterFromProviderState("accountNumber", "\${accountNumber}", "100")
在您的code中:
.valueFromProviderState("price", "\\${price}", 10.0)