gpt4 book ai didi

go - 使用 httptest 为多个处理程序提供服务以模拟多个请求

转载 作者:IT王子 更新时间:2023-10-29 01:40:55 25 4
gpt4 key购买 nike

我已经用谷歌搜索了所有内容,但找不到任何东西。

我有一个接受 http.Client 的结构,它会发送多个 GET 请求。在我的测试中,我想模拟响应,这样它就不会发送真正的请求。

目前我已经弄清楚如何只处理 1 个请求,如下所示:

     ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
file, err := os.Open("./testdata/1.html")
if err != nil {
t.Error(err)
}
bytes, err := ioutil.ReadAll(file)
if err != nil {
t.Error(err)
}
w.Write(bytes)
}))

ts.Client() // Now I can inject this client into my struct.

因此,一旦该响应被模拟出来并且 http 客户端执行新请求,我的测试就会在此之后发送真实请求。

我如何允许多个处理程序以便在调用 http.Client.Get(...) 时模拟多个响应?

最佳答案

由于原始问题使用了 httptest.NewServer - 您可以在 httptest.Server 函数上注册一个 ServeMux,然后您可以向该 mux 添加多个路由:

mux := http.NewServeMux()

mux.HandleFunc("/someroute/", func(res http.ResponseWriter, req *http.Request) {
...do some stuff...
})
mux.HandleFunc("/someotherroute/", func(res http.ResponseWriter, req *http.Request) {
...do other stuff...
})

ts := httptest.NewServer(mux)
defer ts.Close()

关于go - 使用 httptest 为多个处理程序提供服务以模拟多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com