如何使用 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中文網其他相關文章!