如何在Go中测试HTTP调用

4

I have the following code:

// 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包。


网上有很多例子,你试过吗? - Roman Kiselenko
1个回答

7
请看这里:

https://golang.org/pkg/net/http/httptest/#example_Server

基本上,您可以使用httptest.NewServer函数创建一个新的“模拟”http服务器。

您可以让您的模拟服务器返回测试所需的任何响应,并且还可以让您的模拟服务器存储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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接