我有以下代码:
// HTTPPost to post json messages to the specified url func HTTPPost(message interface{}, url string) (*http.Response, error) { jsonValue, err := json.Marshal(message) if err != nil { logger.Error("Cannot Convert to JSON: ", err) return nil, err } logger.Info("Calling http post with url: ", url) resp, err := getClient().Post(url, "application/json", bytes.NewBuffer(jsonValue)) if err != nil { logger.Error("Cannot post to the url: ", url, err) return nil, err } err = IsErrorResp(resp, url) return resp, err }
我想为此编写测试,但不确定如何使用httptest包。
在这里看看:
https://golang.org/pkg/net/http/httptest/#example_Server
基本上,您可以使用httptest.NewServer函数创建一个新的“模拟” http服务器。
httptest.NewServer
您可以让模拟服务器返回测试所需的任何响应,还可以让模拟服务器存储HTTPPost函数发出的请求以对其进行断言。
HTTPPost
func TestYourHTTPPost(t *testing.T){ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, `response from the mock server goes here`) // you can also inspect the contents of r (the request) to assert over it })) defer ts.Close() mockServerURL = ts.URL message := "the message you want to test" resp, err := HTTPPost(message, mockServerURL) // assert over resp and err here }