有没有办法生成 PACT 文件来传达数据格式验证?
我正在尝试完成的一个例子:作为消费者,我希望有一个包含一些数据的“phoneNumber”字段。我还希望电话号码必须包含 7 到 10 位数字。它可能包括破折号和/或括号。
在消费者测试(下面的代码)中,我构造了响应对象,因此我可以按照我的预期指定格式。但这并不意味着提供者受到同样的限制。(即,他们可能以这种方式提供它,但他们也可能以我不期望的格式提供它)。
我猜测验证数据的最合乎逻辑的方法是在 PACT 文件中提供一些 RegEx 作为元数据。这是可以做到的吗?如果是这样,你如何在代码中提供这个。
下面的代码片段有助于可视化我是如何执行此操作的:(代码片段的功劳转到“ https://github.com/Mikuu/Pact-JVM-Example ”)
Object homerUser = new Object() {
public String name = "Homer Simpson";
public String phoneNumber = "1-234-5678";
};
JSONObject responseBody = new JSONObject(new ObjectMapper().writeValueAsString(homerUser));
RequestResponsePact pact = ConsumerPactBuilder
.consumer(consumer)
.hasPactWith(provider)
.given("User Homer Exist")
.uponReceiving("getUserById where homer exists")
.path("/users/1")
.method("GET")
.headers(requestHeader)
.willRespondWith()
.status(HttpStatus.OK.value())
.headers(responseHeader)
.body(responseBody)
.toPact();
PactVerificationResult result = runConsumerTest(pact, getProviderConfig(), mockServer -> {
ResponseEntity<User> response = userProvider.getUserById(1);
assertThat(response.getStatusCode().value(), is(200));
assertThat(response.getHeaders().get(HttpHeaders.CONTENT_TYPE), contains(MediaType.APPLICATION_JSON_UTF8_VALUE));
assertThat(response.getBody(), notNullValue());
assertThat(response.getBody().phoneNumber, matchesPhoneNumberPattern());
});