PactDslJsonArray匹配所有项目的根级别数组

时间:2018-04-06 19:53:28

标签: pact pact-jvm pact-java

我可以成功使用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")

由于

1 个答案:

答案 0 :(得分:1)

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")
    ...
}

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