如何使用 httptest 在 Go 中测试 HTTP 调用
简介
Go 中的 HTTP 测试可以使用 httptest 包来简化。本文探讨如何利用 httptest 进行响应和服务器测试,包括服务器测试的详细示例。
测试类型
httptest 提供两类测试:
响应测试
在响应测试中,Recorder 对象捕获响应及其内容。以下代码片段演示了响应测试:
resp := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/3D/header/?", nil) http.DefaultServeMux.ServeHTTP(resp, req)
服务器测试
对于服务器测试,httptest 模拟服务器并提供可以使用的 URL:
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, `{"fake twitter json string"}`) }))
在此示例中,创建了一个使用预定义 JSON 数据进行响应的服务器。然后,可以在测试的应用程序中使用该服务器的 URL。
示例:在retrieveTweets 中测试 HTTP 调用
要测试retrieveTweets 功能:
func TestIt(t *testing.T){ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, `{"fake twitter json string"}`) })) defer ts.Close() twitterUrl = ts.URL c := make(chan *twitterResult) go retrieveTweets(c) tweet := <-c if tweet != expected1 { t.Fail() } tweet = <-c if tweet != expected2 { t.Fail() } }
通过模拟服务器,我们可以验证retrieveTweets函数收到的结果。
以上是如何使用'httptest”在 Go 中有效测试 HTTP 调用?的详细内容。更多信息请关注PHP中文网其他相关文章!