Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pact body matching-匹配节点数_Java_Consumer_Pact - Fatal编程技术网

Java Pact body matching-匹配节点数

Java Pact body matching-匹配节点数,java,consumer,pact,Java,Consumer,Pact,我努力做到以下几点: 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_

我努力做到以下几点:

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();
    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();
我想验证body(“entry”)中的特定节点是否具有最小和最大数量的称为“content”的直接子节点(1到10个节点)。我不关心这些子节点中有什么,它们有什么值,或者它们有多少子节点

因为我是pact的新手,不知道如何匹配这样的东西,我希望有人能帮助我。 提前谢谢


编辑1:

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

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();
    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();
不要因此而生气,那
.matchBody
只是将该节点转换为典型的
$path+'[#text]'
-notation,其中
.value
将正则表达式匹配器规则添加到正文匹配器

我还看了一下:maxArrayLike/minArrayLike看起来很有希望,但我不知道如何将其应用到我的案例中


编辑2:

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

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();
    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类别中。 这种情况的实际表现是: 它匹配
$.feed
的大多数内部节点的类型、最小值和最大值。例如:
$.feed.0.title
$.feed.1.link
,…,
$.feed.6.entry.0.title


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

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


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

您已经尝试了什么?我添加了一些信息。问题是。。。作为客户,我调用提要的URL,指定条目限制和其他一些内容。我想实现的是,当提供者改变我可以通过URL提供的参数或某种方式提供的行为时,我的测试肯定会失败。在我看来,这迫使我在通过URL提供参数时指定我期望的内容。这可能太功能化了,但在我看来,提供者端的测试并不能真正确保我作为消费者知道API是如何工作的,特别是没有验证我作为消费者得到了我期望得到的东西。我想我理解你的问题。这个地址吗?