java Pact JVM检查是否有数组或空响应

atmip9wb  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(80)

当请求项目信息时,我正在尝试创建与消费者之间的合同。该项目具有非常复杂的数据结构,其中包含嵌套属性,并包含字符串、列表、字符串数组、枚举数组等字段。此外,某些字段可能返回为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规范。
谢谢。

l2osamch

l2osamch1#

请参见https://docs.pact.io/faq#why-is-there-no-support-for-specifying-optional-attributes。您需要编写两个单独的测试用例来涵盖这两种场景。

相关问题