当请求项目信息时,我正在尝试创建与消费者之间的合同。该项目具有非常复杂的数据结构,其中包含嵌套属性,并包含字符串、列表、字符串数组、枚举数组等字段。此外,某些字段可能返回为null或填充了与其类型相关的值,这也增加了复杂性。
我想做的是创建一个可以重复用于任何项目的约定响应匹配器。目前,有120个项目(每个项目是一个单独的API调用,项目名称在请求的查询参数中),我可以请求信息,为每个项目编写一个约定匹配器是不可行的/可维护的。
例如,样本响应减少(实际响应超过60行):
return new PactDslJsonBody()
.object("metadata")
.stringValue("name", "item-1")
.integerType("index", 1)
.eachLike("contents")
.stringType("param", "content-param")
.stringType("value", "content-value")
.closeArray
.closeObject
我遇到的问题是字段contents也可能作为null从提供程序返回。我试图实现的是,我是否可以在同一PactDslJsonBody中具有OR条件或类似的条件,该条件可以检查eachLike,但也可以接受字段为空。
内容字段填充:
{
"metadata":{
"name":"item-1",
"index":1,
"contents":[
{
"param":"content-param",
"value":"content-value"
}
]
}
}
内容字段为空:
{
"metadata":{
"name":"item-1",
"index":1,
"contents":null
}
}
我看到有PactDslJsonBody.or()可用,但其用法没有明确记录,因此我不确定这是否是上述用例的预期用法。
编写单独的测试是不可行的,因为这是一个特定用例,需要为n个消费者测试重复相同的PactDslJsonBody,我们需要测试每一个项目,因为我们有一些字段值作为枚举在消费者和提供者之间的直接Map,因此我们要确保每一个项目有这样的字段的预期值。我们也不知道提前哪些项目将此字段为空,哪些项目将其填充,因此,我们希望有使用类似orNull
等的选项。
我在网上找了很多,但没有找到上述问题的明确答案。如果能提供任何帮助,我们将不胜感激。我们真的很想使用Pact,因为它是我们的常用工具,而上述是我们要测试的一个关键用例。
我使用的是Pact JVM版本4.3.15和V3规范。
谢谢。
1条答案
按热度按时间l2osamch1#
请参见https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes。您需要编写两个单独的测试用例来涵盖这两种场景。