首页 >后端开发 >Golang >如何使用'httptest”在 Go 中有效测试 HTTP 调用?

如何使用'httptest”在 Go 中有效测试 HTTP 调用?

Barbara Streisand
Barbara Streisand原创
2024-12-15 08:15:15565浏览

How to Effectively Test HTTP Calls in Go using `httptest`?

如何使用 httptest 在 Go 中测试 HTTP 调用

简介

Go 中的 HTTP 测试可以使用 httptest 包来简化。本文探讨如何利用 httptest 进行响应和服务器测试,包括服务器测试的详细示例。

测试类型

httptest 提供两类测试:

  • 响应测试:验证从请求。
  • 服务器测试: 模拟服务器来测试与被测应用程序的 HTTP 交互。

响应测试

在响应测试中,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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn