在尝试设置两种不同的web.Request
状态以用于某些测试用例时,一种没有任何标题,另一种有,我遇到了问题:
设置
我创建fakeRequest
,fakeRequestNoHeaders
因此:
// create fake request
fakeRequest := new(web.Request)
fakeRequest.Request = httptest.NewRequest("GET",
fakeServer.URL,
nil)
fakeRequestNoHeaders := new(web.Request)
fakeRequestNoHeaders.Request = fakeRequest.Request
// give fakeRequest some headers
fakeRequest.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”。
ITMISS
相关分类