在嘗試設(shè)置兩種不同的web.Request狀態(tài)以用于某些測試用例時,一種沒有任何標(biāo)題,另一種有,我遇到了問題:設(shè)置我創(chuàng)建fakeRequest,fakeRequestNoHeaders因此:// create fake requestfakeRequest := new(web.Request)fakeRequest.Request = httptest.NewRequest("GET", fakeServer.URL, nil)fakeRequestNoHeaders := new(web.Request)fakeRequestNoHeaders.Request = fakeRequest.Request// give fakeRequest some headersfakeRequest.Header.Add("Authorization", "Bearer ksjaf;oipyu7")fakeRequest.Header.Add("Scope", "test")完整性測試我當(dāng)然希望fakeRequest.Header != fakeRequestNoHeaders.Header. 我寫那個測試:t.Run("HeadersSanityTest", func(t *testing.T) { assert.NotEqualf(t, fakeRequest.Header, fakeRequestNoHeaders.Header, "fakeRequest,fakeRequestNoHeaders share the same header state")測試結(jié)果它失敗。為什么會這樣,我怎樣才能實(shí)現(xiàn)我正在嘗試的目標(biāo)?更新:我找到了罪魁禍?zhǔn)祝篽ttp.Request由 返回的底層httptest.NewRequest,實(shí)際上是一個指針。Header根本就屬于那個Request。問題現(xiàn)在歸結(jié)為“如何深度復(fù)制那個Request”。
1 回答

ITMISS
TA貢獻(xiàn)1871條經(jīng)驗 獲得超8個贊
事實(shí)上,問題不在于字段Header,而在于Request字段,它是一個指針。(哦不!我不小心淺拷貝了)
解決方案
我記得,在我之前的一個測試中,我專門寫了一個方法來解決這個問題:
func makeBasicRequest() *web.Request {
baseReq := httptest.NewRequest(http.MethodPost,
"[some url here]",
nil)
req := new(web.Request)
req.Request = baseReq
return req
}
我基本上只是把它帶入這個測試,并使用它,在我需要的每個虛假請求中點(diǎn)擊它一次。
- 1 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報
0/150
提交
取消