При попытке установить два различных состояния 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
.»