我已经用谷歌搜索了所有内容,但找不到任何东西。
我有一个接受 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/