在嘗試設置兩種不同的web.Request狀態以用于某些測試用例時,一種沒有任何標題,另一種有,我遇到了問題:設置我創建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")完整性測試我當然希望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")測試結果它失敗。為什么會這樣,我怎樣才能實現我正在嘗試的目標?更新:我找到了罪魁禍首:http.Request由 返回的底層httptest.NewRequest,實際上是一個指針。Header根本就屬于那個Request。問題現在歸結為“如何深度復制那個Request”。
1 回答
ITMISS
TA貢獻1871條經驗 獲得超8個贊
事實上,問題不在于字段Header,而在于Request字段,它是一個指針。(哦不!我不小心淺拷貝了)
解決方案
我記得,在我之前的一個測試中,我專門寫了一個方法來解決這個問題:
func makeBasicRequest() *web.Request {
baseReq := httptest.NewRequest(http.MethodPost,
"[some url here]",
nil)
req := new(web.Request)
req.Request = baseReq
return req
}
我基本上只是把它帶入這個測試,并使用它,在我需要的每個虛假請求中點擊它一次。
- 1 回答
- 0 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消
