我有以下代码: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 使用集成测试来测试这些调用。
- 3 回答
- 0 关注
- 318 浏览
添加回答
举报
0/150
提交
取消