亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

web.Request 結構的字段狀態未在 Golang 中正確克隆

web.Request 結構的字段狀態未在 Golang 中正確克隆

Go
鴻蒙傳說 2023-04-04 14:22:00
在嘗試設置兩種不同的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

}

我基本上只是把它帶入這個測試,并使用它,在我需要的每個虛假請求中點擊它一次。


查看完整回答
反對 回復 2023-04-04
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號