为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
哔哔one 2021-06-03 22:11:23
我有以下代码:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "log"    "net/http"    "time")type twitterResult struct {    Results []struct {        Text     string `json:"text"`        Ids      string `json:"id_str"`        Name     string `json:"from_user_name"`        Username string `json:"from_user"`        UserId   string `json:"from_user_id_str"`    }}var (  twitterUrl = "http://search.twitter.com/search.json?q=%23UCL"  pauseDuration = 5 * time.Second)func retrieveTweets(c chan<- *twitterResult) {    for {        resp, err := http.Get(twitterUrl)        if err != nil {            log.Fatal(err)        }        defer resp.Body.Close()        body, err := ioutil.ReadAll(resp.Body)        r := new(twitterResult) //or &twitterResult{} which returns *twitterResult        err = json.Unmarshal(body, &r)        if err != nil {            log.Fatal(err)        }        c <- r        time.Sleep(pauseDuration)    }}func displayTweets(c chan *twitterResult) {    tweets := <-c    for _, v := range tweets.Results {        fmt.Printf("%v:%v\n", v.Username, v.Text)    }}func main() {    c := make(chan *twitterResult)    go retrieveTweets(c)    for {        displayTweets(c)    }}我想为它编写一些测试,但我不确定如何使用 httptest 包http://golang.org/pkg/net/http/httptest/希望得到一些指点我想出了这个(无耻地从 go OAuth https://code.google.com/p/goauth2/source/browse/oauth/oauth_test.go的测试中复制):var request = struct {    path, query       string // request    contenttype, body string // response}{    path:        "/search.json?",    query:       "q=%23Kenya",    contenttype: "application/json",    body:        twitterResponse,}var (    twitterResponse = `{ 'results': [{'text':'hello','id_str':'34455w4','from_user_name':'bob','from_user_id_str':'345424'}]}`)func TestRetrieveTweets(t *testing.T) {    handler := func(w http.ResponseWriter, r *http.Request) {        w.Header().Set("Content-Type", request.contenttype)        io.WriteString(w, request.body)    }
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

最初这个代码片段是在 GitHub Gist 上找到的,但是在尝试将这个概念应用于我的一个项目时,我意识到我必须显着修改主要代码,我决定使用 docker 和 curl 使用集成测试来测试这些调用。


查看完整回答
反对 回复 2021-06-07
  • 3 回答
  • 0 关注
  • 318 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信