匹配所有项的 PactDslJsonArray 根级数组

PactDslJsonArray root level arrays that match all items

我可以成功地使用 PactDslJsonArray.arrayMaxLike(3,3) 创建一个协议,最多可验证返回的 3 个项目。

"body": [
{
    "firstName": "first",
    "lastName": "last",
    "city": "test",
},
{
    "firstName": "first",
    "lastName": "last",
    "city": "test",
},
{
    "firstName": "first",
    "lastName": "last",
    "city": "test",
}
]


"body": {
"$": {
    "matchers": [
        {
            "match": "type",
            "max": 3
        }
    ]
...

但是,我想重用另一个请求的正文而无需再次指定属性。

DslPart body = new PactDslJsonBody()
    .stringType("firstName","first")
    .stringType("lastName","last")
    .stringType("city", "test")

我正在寻找的是这样的东西:

PactDslJsonArray.arrayMaxLike(3,3).template(body)

而不是

PactDslJsonArray.arrayMaxLike(3,3)
  .stringType("firstName","first")  
  .stringType("lastName","last")  
  .stringType("city", "test")

谢谢

DSL 的重点是对代码中的 Pact 交互进行验证。使用模板有点违背了这个概念。我建议的是,如果你在多个地方有相同的交互,那么添加一个共享函数来添加所述交互将是最好的方法。例如:

private void personalDetailInteraction(DslPart part) {
   return part.stringType("firstName","first")
    .stringType("lastName","last")
    .stringType("city", "test");
}

private void yourTest() {
    personalDetailInteraction(
        PactDslJsonArray.arrayMaxLike(3,3)
    )
    .stringType("blarg", "weee")
    ...
}

如果需要在不同的 class 之间共享,请创建一个可以共享的 InteractionUtils class。在我看来,这是最好的方法,因为编译器确保在创建交互时不会出错,这是整个框架的重点;减少人为错误。