junit PACT测试:编写PactDslJsonBody正确方法

ltskdhd1  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(144)

我有以下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();

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

hi3rlvi2

hi3rlvi21#

我们尝试过使用反射来消除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字符串。
作为Pact-Jvm的一部分的examples确实有助于您了解可以创建的不同类型的测试。

相关问题