对于句子
resp, err := client.Get(fmt.Sprintf("https://www.xxxxx/day?time=%s", time))
如果我想在单元测试中模拟对此 client.Get() 的响应,我应该使用 httptest.server,但是如何将 url ( https://www.xxxxx/day?time=%s) 绑定(bind)到 httptest.server 的 url?这样当我调用 client.Get() 时它可以返回我之前设置的响应。 出于某种原因,我不能在这里模拟客户。
最佳答案
通常不会。您从服务器获取基本 URL 并将其提供给客户端:
package main
import (
"fmt"
"net/http"
"net/http/httptest"
"testing"
"time"
)
func TestClient(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Verify request, send mock response, etc.
}))
defer server.Close()
var client *http.Client
var time time.Time
baseURL := server.URL // Something like "http://127.0.0.1:53791"
resp, err := client.Get(fmt.Sprintf(baseURL+"/day?time=%s", time))
if err != nil {
t.Fatal(err)
}
// Verify response body if applicable
resp.Body.Close()
}
关于unit-testing - 如何在 golang 中注入(inject)一个 url 到 httptest.server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46944063/