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

时间:2019-06-06 13:59:01

标签: java json testing junit pact

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

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

1 个答案:

答案 0 :(得分:1)

我们尝试使用反射来解决我们的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确实有助于您了解可以创建的各种测试类型。