You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pact(JVM)最小API测试示例:无实际客户端如何验证REST接口返回200

Pact Framework 测试实现方案

200状态码验证实现

你的现有配置存在错误:PactProviderRuleMk2 是用于启动本地Mock Provider服务的组件,不需要直接指向真实的cataas地址,你需要先定义契约交互,再通过调用本地Mock服务完成消费者侧验证。

完整代码示例

import au.com.dius.pact.consumer.Pact;
import au.com.dius.pact.consumer.PactProviderRuleMk2;
import au.com.dius.pact.consumer.PactVerification;
import au.com.dius.pact.consumer.dsl.PactDslWithProvider;
import au.com.dius.pact.model.RequestResponsePact;
import org.junit.Rule;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import static org.junit.Assert.assertEquals;

public class CatApiConsumerTest {
    // Mock Provider启动在本地8080端口
    @Rule
    public PactProviderRuleMk2 mockProvider = new PactProviderRuleMk2("test_provider", "localhost", 8080, this);

    // 定义契约交互:GET /cat请求返回200状态码
    @Pact(consumer = "test_consumer")
    public RequestResponsePact defineCatApiContract(PactDslWithProvider builder) {
        return builder
                .given("cat service is available")
                .uponReceiving("GET request to fetch cat image")
                .path("/cat")
                .method("GET")
                .willRespondWith()
                .status(200)
                .toPact();
    }

    @Test
    @PactVerification
    public void verifyCatApiReturn200() throws IOException, InterruptedException {
        // 模拟消费者调用本地Mock服务
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:8080/cat"))
                .GET()
                .build();
        HttpResponse<Void> response = HttpClient.newHttpClient()
                .send(request, HttpResponse.BodyHandlers.discarding());

        // 验证状态码符合预期
        assertEquals(200, response.statusCode());
    }
}

流程说明

  • 即使没有真实的前端客户端,你也可以用上述测试类模拟消费者调用逻辑,完成契约定义
  • 测试执行通过后会自动生成Pact契约文件,后续你可以用该契约文件对真实的https://cataas.com服务做Provider侧验证,确认真实服务返回符合契约要求

入门学习指引

  • 首先掌握消费者驱动契约的核心概念,明确消费者测试、Provider验证两个核心环节的分工与作用
  • 可以从简单的GET请求场景入手,先跑通完整的契约生成、验证流程,再逐步扩展带请求参数、响应体匹配的复杂场景
  • 练习阶段可以先不用对接真实服务,先完成Mock端的测试流程,再尝试对接真实服务做校验

内容的提问来源于stack exchange,提问作者nomeal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:45:05