Pact 合约测试:如何使用 json 值生成动态 PactDslJsonBody?
Pact Contract Test :How to generate dynamic PactDslJsonBody using json value?
如何使用 json 值生成动态 PactDslJson 主体?
Pact 团队是否可以提供自动生成器来动态分配主体?
契约体:
body(new PactDslJsonBody()
.object("testsuite")
.stringType("webId","24255")
.closeObject());
断言响应:
"{\"testsuite\":{\"webId\":\"24255\"}}";
基于 Assert Response(作为输入)并创建类似
的 dslbody
String json = "{\"testsuite\":{\"webId\":\"24255\"}}"
//body(json);
body(generatePactDSLJsonBody(json));
断言响应:
assertEqual("{\"testsuite\":{\"webId\":\"24255\"}}",json);
我知道在 body 中我们可以提供 json 本身。但我需要使用 Json.
生成 PactDSLJson 正文
从 JSON 文档自动生成 DSL 类 在技术上是可行的,但我看不到您的示例的好处。大多数情况下,匹配器是根据 JSON 有效负载的语义定义的,而不是语法。
例如,根据您的示例 JSON,它会将 webId 属性视为一个字符串,并生成一个字符串类型匹配器。不过,明明是数字,不是字符串。
自动生成的 DSL 正文将接受以下 JSON:
{"testsuite":{"webId":"This is not a web ID &^*&^%"}}
但是,用于从 JSON 文档创建框架消费者测试的自动生成工具可以根据 JSON 的语义进行更改,这将非常有用。
我们构建了一个库来从 Java Bean 生成 PactDslJsonBody
。这不是你的直接用例,因为你想使用 JSON 作为输入,但也许你设计了你的端点来公开 Java Beans,所以你可以将它们用于你的契约。
您可能想看看 https://github.com/remondis-it/pact-consumer-builder。
使用此库,您可以在每个字段或每个类型的基础上定义 PactDslJsonBody
映射。在我们的例子中,这将样板代码减少到几乎一行:
PactDslJsonBody jsonBody = ConsumerExpects.type(YOUR_BEAN_TYPE.class)
.useTypeMapping(...)
// Other field or type configurations
.build(new PactDslJsonBody(), YOUR_BEAN_SAMPLE_INSTANCE);
这会对 PactDslJsonBody
执行必要的调用,您可以将结果用于 Pact 测试。
顺便说一句:Pact Consumer Builder 库与为您生成测试数据实例的夹具生成器一起工作得很好 Java Beans。您可以使用我们的夹具生成器 (https://github.com/remondis-it/resample),但所有其他 Java Bean 实例生成器也应该可以工作。
如何使用 json 值生成动态 PactDslJson 主体? Pact 团队是否可以提供自动生成器来动态分配主体?
契约体:
body(new PactDslJsonBody()
.object("testsuite")
.stringType("webId","24255")
.closeObject());
断言响应:
"{\"testsuite\":{\"webId\":\"24255\"}}";
基于 Assert Response(作为输入)并创建类似
的 dslbodyString json = "{\"testsuite\":{\"webId\":\"24255\"}}"
//body(json);
body(generatePactDSLJsonBody(json));
断言响应:
assertEqual("{\"testsuite\":{\"webId\":\"24255\"}}",json);
我知道在 body 中我们可以提供 json 本身。但我需要使用 Json.
生成 PactDSLJson 正文从 JSON 文档自动生成 DSL 类 在技术上是可行的,但我看不到您的示例的好处。大多数情况下,匹配器是根据 JSON 有效负载的语义定义的,而不是语法。
例如,根据您的示例 JSON,它会将 webId 属性视为一个字符串,并生成一个字符串类型匹配器。不过,明明是数字,不是字符串。
自动生成的 DSL 正文将接受以下 JSON:
{"testsuite":{"webId":"This is not a web ID &^*&^%"}}
但是,用于从 JSON 文档创建框架消费者测试的自动生成工具可以根据 JSON 的语义进行更改,这将非常有用。
我们构建了一个库来从 Java Bean 生成 PactDslJsonBody
。这不是你的直接用例,因为你想使用 JSON 作为输入,但也许你设计了你的端点来公开 Java Beans,所以你可以将它们用于你的契约。
您可能想看看 https://github.com/remondis-it/pact-consumer-builder。
使用此库,您可以在每个字段或每个类型的基础上定义 PactDslJsonBody
映射。在我们的例子中,这将样板代码减少到几乎一行:
PactDslJsonBody jsonBody = ConsumerExpects.type(YOUR_BEAN_TYPE.class)
.useTypeMapping(...)
// Other field or type configurations
.build(new PactDslJsonBody(), YOUR_BEAN_SAMPLE_INSTANCE);
这会对 PactDslJsonBody
执行必要的调用,您可以将结果用于 Pact 测试。
顺便说一句:Pact Consumer Builder 库与为您生成测试数据实例的夹具生成器一起工作得很好 Java Beans。您可以使用我们的夹具生成器 (https://github.com/remondis-it/resample),但所有其他 Java Bean 实例生成器也应该可以工作。