我有以下JSON格式

{
    "file": {
        "version": "v1.4",
        "release": "1.1"
    },
    "status": "ON",
    "document": {
        "status": "NOT_FOUND",
        "release": "undefined"
    }
}


而且我想知道如何将格式添加到我的PactDslJsonBody中,例如?

DslPart result = new PactDslJsonBody()
        .stringType("file.version", "v1.4")
        .stringType("file.release", "1.1")
        .stringType("status", "ON")
        .stringType("document.status", "NOT_FOUND")
        .stringType("document.release", "release")
        .asBody();


还是可以添加Java Pojo?我有类ApplicationResponse:

public class ApplicationResponse {

  private File file;
  private String status;
  private Document document;

  //...

}

Something like ??
    DslPart result = new PactDslJsonBody()
            .object(ApplicationResponse)
            .asBody();


最好的方法是什么?你能举个例子吗

最佳答案

我们尝试使用反射来解决我们的pojos,以做您想做的事情。但是,我们的类带有许多Lombok批注,并且我们无法从生成器批注的字段中获取默认值。我们放弃了尝试使用它。但是毫无疑问,有更多时间的开发人员可以实现这一目标。

我现在正在为我们的项目积极创建契约,并同时使用LambdaDslPactDslJsonBody建立交互。

DslPart actualPactDsl = LambdaDsl.newJsonBody((body) -> {
            body
                .stringType("status", "ON")
                .object("document", (doc) -> {
                    doc.stringType("status", "NOT_FOUND");
                    doc.stringType("release", "undefined");
                })
                .object("file", (file) -> {
                    file.stringType("version", "v1.4");
                    file.stringType("release", "1.1");
                });
}).build();


要么

String pactDslJson = new PactDslJsonBody()
    .stringType("status", "ON")
    .object("document")
    .stringType("status", "NOT_FOUND")
    .stringType("release", "undefined")
    .closeObject()
    .object("file")
    .stringType("version", "v1.4")
    .stringType("release", "1.1")
    .closeObject()
    .getBody().toString();



这两个示例都将从您的示例中生成Json字符串。

examples中的Pact-Jvm确实有助于您了解可以创建的不同类型的测试。

关于java - PACT测试:编写PactDslJsonBody的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56479178/

10-10 09:51