0

有没有办法生成 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());
    });
4

1 回答 1

0

Yes, you can use regular expressions. Look at the matchers documentation for pact-jvm.

于 2018-12-12T22:46:40.253 回答