契约身体匹配 - 匹配节点数

时间:2018-06-06 11:30:00

标签: java consumer pact

我尝试实现以下目标:

我想验证正文中的特定节点(“条目”)是否在最小和最大数量的称为“内容”(1到10个节点)的直接子节点之间。我不关心这些子节点中的内容,它们具有哪些值或它们有多少个子节点。

由于我是新手,并且不知道如何匹配这样的东西,我希望有人可以帮助我。 提前谢谢。

EDIT1:

我使用一个节点匹配器,我的一个同事构建如下:

return builder.given("given").uponReceiving("description").path(SERVICEPATH)
                .query(query).method(METHOD_GET).headers(ACCEPT, REQ_ACCEPT).willRespondWith().status(200)
                .matchHeader(HEADER_CONTENT_TYPE, RESP_HEADER_CONTENT_TYPE_REGEX).body(responseBody)
                .matchBody(new PactDslXmlNodeMatcher().node("entry").node("content").value(".*")).toPact();

不要让那些烦恼,.matchBody只是将该节点转换为典型的$. + path + '[#text]' - 符号,其中.value将正则表达式匹配器规则添加到正文匹配器中。

我也看过:https://github.com/DiUS/pact-jvm/tree/master/pact-jvm-consumer-junit其中maxArrayLike / minArrayLike看起来很有希望,但我不知道如何将这个应用到我的案例中。

EDIT2:

现在我有一个非常酷的PactDslWithProvider如下:

    return builder.given("Genereller Test").uponReceiving("Feed soll Eintraege enthalten").path(SERVICEPATH)
            .query(query).method(METHOD_GET).headers(ACCEPT, REQ_ACCEPT).willRespondWith().status(200)
            .matchHeader(HEADER_CONTENT_TYPE, RESP_HEADER_CONTENT_TYPE_REGEX)
            .body(responseBody)
            .matchBody(new PactDslXmlNodeMatcher().node("feed").minMaxType(minNumberNodesInFeed, maxNumberNodesInFeed))
            .toPact();

方法“minMaxType”将MinMaxTypeMatcher添加到具有节点路径的body-category。 这个的实际行为: 它匹配$.feed的最内部节点的类型,最小值和最大值。例如:$.feed.0.title$.feed.1.link,...,$.feed.6.entry.0.title

但我真正想要的是验证$.feed是否有最小和最大数量的子节点。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

听起来你正在尝试使用Pact进行功能测试,而不是合同测试。一般来说,你不应该编写关心数组中有多少项的测试。阅读这两个链接,让我知道你如何去。

另外,如果您还没有加入我们的slack.pact.io。