是否可以生成一个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());
});
答案 0 :(得分:0)
是的,您可以使用正则表达式。查看pact-jvm的匹配器文档。