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

使用httptest mock API时如何校验请求是否符合预期?

实现思路

核心逻辑是在mock服务的handler中记录收到的请求信息,待被测函数执行完成后校验记录值即可:

  1. 在测试函数内声明变量,用于存储收到的请求路径
  2. 在mock服务的handler闭包中,将收到的请求路径赋值给外部声明的变量
  3. 调用完被测函数后,先判断变量是否为空确认是否收到请求,再判断路径是否符合预期

完整示例代码

func TestSomeFeature(t *testing.T) {
    // 存储实际收到的请求路径
    var receivedPath string

    server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 记录请求路径
        receivedPath = r.URL.Path
        w.WriteHeader(http.StatusOK)
    }))
    // 测试结束后关闭mock服务,避免端口占用
    defer server.Close()

    // 调用待测试的业务函数
    SomeFeature(server.URL, "foo")

    // 断言:必须收到请求
    if receivedPath == "" {
        t.Fatal("未收到任何请求,被测函数未正确发起调用")
    }
    // 断言:请求路径必须符合预期
    if receivedPath != "/foo" {
        t.Fatalf("请求路径不匹配,预期:/foo,实际:%s", receivedPath)
    }
}

扩展说明

  • 如果需要校验请求方法、请求头、请求体等更多信息,只需要在handler中将对应信息存入外部变量,后续增加对应的校验逻辑即可
  • 如果测试场景涉及多次请求,可以用切片[]string存储所有收到的请求路径,先校验切片长度确认请求次数,再逐一校验路径内容
  • 如果你使用第三方测试断言库(比如testify/assert),可以简化断言写法,比如直接用assert.Equal(t, "/foo", receivedPath, "请求路径错误")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:27:02