如何使用 httptest 在 Go 中测试 HTTP 调用
在 Go 中,httptest 包提供了一种测试 HTTP 调用的便捷方法。它提供响应测试和服务器测试,以彻底检查应用程序的 HTTP 功能。
响应测试
响应测试侧重于验证响应本身。例如,您可以验证响应的状态代码、标头和内容。下面是一个示例:
func TestHeader3D(t *testing.T) { resp := httptest.NewRecorder() // ... setup the request with headers and parameters ... http.DefaultServeMux.ServeHTTP(resp, req) // ... assert the response body and content type ... }
服务器测试
相反,服务器测试使您能够测试整个 HTTP 服务器,包括其路由和处理程序。此方法对于测试通过应用程序的请求流很有用。下面是使用 httptest.NewServer() 方法的示例:
func TestIt(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // ... your handler setup and response ... })) defer ts.Close() // ... setup your requests and make assertions based on the responses ... }
在您的特定情况下,您可以利用服务器测试来模拟具有可预测响应的 Twitter 搜索 API。这允许您在不进行实际 HTTP 调用的情况下测试您的函数。
func TestRetrieveTweets(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Set up your mock response for the Twitter API ... })) defer ts.Close() twitterUrl = ts.URL c := make(chan *twitterResult) go retrieveTweets(c) // ... assert the results you receive in the `c` channel ... }
请记住,retrieveTweets 函数中的 r 参数已经是一个指针,因此无需将其作为 json.Unmarshal 中的指针传递.
以上是如何使用 `httptest` 包在 Go 中有效测试 HTTP 调用?的详细内容。更多信息请关注PHP中文网其他相关文章!