我在 Go 中使用 httptest 包來測試我的應(yīng)用程序。最近我注意到我的一項(xiàng)測試未能完成,因?yàn)槲业臏y試沒有讀取響應(yīng)的正文func Test_AnyTest(t *testing.T) { serve := newServer() s := httptest.NewServer(serve) defer s.Close() testUrl := "/any/old/url" c := &http.Client{} r, _ := http.NewRequest("GET", s.URL+testUrl, new(bytes.Buffer)) r.Header.Add("If-None-Match", cacheVersion) res, _ := c.Do(r) if res.StatusCode == 304 { t.Errorf("Should not have got 304") }}s.Close()由于測試服務(wù)器上存在未完成的 http 連接,因此上述代碼在延遲調(diào)用上被阻塞。我的服務(wù)器有一些寫入正文的代碼(使用 http.ResponseWriter 接口)。事實(shí)證明,在我在測試中讀取正文之前,這段代碼實(shí)際上是阻塞的。像這樣的電話就成功了。ioutil.ReadAll(res.Body)我不介意在我的測試中進(jìn)行這個(gè)調(diào)用,但我擔(dān)心行為不端的客戶端可能會(huì)導(dǎo)致這種行為并消耗服務(wù)器資源。有誰知道這里發(fā)生了什么?這是預(yù)期的行為,還是只是測試框架的問題?
- 1 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)
0/150
提交
取消