为什么我们需要在PACT测试中进行单元测试?

问题描述 投票:1回答:1

最近,我熟悉了PACT测试。非常酷的想法是为每个对手方制定生产者/消费者。但是,我不明白一个核心原则。在客户端PACT测试中,生成PACT json文件的那个 - 为什么我需要启动测试服务器并按特定请求点击它?

例如。我有生产者叫A,我有消费者B.生产者A有端点getAllUsers,它将返回所有用户的json。在消费者B中,我写了pact测试:

@ExtendWith(PactConsumerTestExt.class)
@PactTestFor(providerName = "ProducerA", port = "1234")
public class ProducerAPactTest {

    private static JSONArray body = new JSONArray("[ {'user_id': '1' }]");

    @Pact(provider = "ProducerA", consumer = "ConsumerB")
    RequestResponsePact createPact(PactDslWithProvider builder) {
        Map<String, String> headers = new HashMap<>();
        headers.put("Content-Type", ContentType.APPLICATION_JSON.toString());

        DslPart regionDsl = PactDslJsonArray.arrayEachLike()
            .stringType("id", "1").closeObject().closeArray();

        return builder.given("Normal state")
            .uponReceiving("Get all users request")
            .path("/users").method("GET").willRespondWith()
            .status(200).headers(headers).body(regionDsl).toPact();
    }

    @Test
    void runTest() {
        // when
        ResponseEntity<String> response = new RestTemplate()
            .getForEntity(mockServer.getUrl() + "/users", String.class);
        // then
        assertThat(response.getStatusCode().value()).isEqualTo(200);
        List<String> contentTypeHeaders = response.getHeaders().get("Content-Type");
        String responseBody = response.getBody();
        assertThat(contentTypeHeaders).isNotNull();
        assertThat(responseBody).isNotNull();
        assertThat(contentTypeHeaders.get(0)).isEqualTo(ContentType.APPLICATION_JSON.toString());
        JSONAssert.assertEquals(responseBody, body, JSONCompareMode.LENIENT);
    }

我用several tutorials写了pact测试。我是在Java下开发的,但我的问题一般都适用于所有Pact测试。为什么我需要创建单元测试?对我来说,断言我收到的东西似乎完全没有意义,因为我已经定义了我自己只有几行?我注意到所有pact消费者测试都遵循相同的模式。我错过了什么?

java pact
1个回答
2
投票

通常,被测试的类不仅仅是反序列化JSON主体。很抱歉这是一个Ruby示例,而不是java示例,但这里是一个客户端类的示例,它将JSON文档转换为表示资源的模型:https://github.com/pact-foundation/pact-ruby/blob/master/example/zoo-app/lib/zoo_app/animal_service_client.rb

我们在这里使用pact test来检查它与不同的http响应的行为(例如,它将404转换为null)。如果您只是直接测试您的HTTP响应,那么除了与提供商建立合同之外,您根本没有为您的消费者代码获得太多价值。

© www.soinside.com 2019 - 2024. All rights reserved.