2

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

谢谢

4

1 回答 1

2

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 类。在我看来,这是最好的方法,因为编译器确保在创建交互时不会出错,这是整个框架的重点;以减少人为错误。

于 2018-04-18T03:38:46.383 回答