我試圖測試一個從Go中的請求中檢索Cookie的函數,但即使它們具有相同的值,比較失敗。測試從函數返回的Cookie
package main
import (
"fmt"
"log"
"net/http"
"net/http/httptest"
"reflect"
)
func GetCookie(url string) *http.Cookie {
req, err := http.NewRequest("GET", url, nil)
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
client := http.DefaultClient
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
cookies := res.Cookies()
var mycookie *http.Cookie
for _, c := range cookies {
if c.Name == "mycookie" {
mycookie = c
}
}
return mycookie
}
func main() {
validCookie := &http.Cookie{
Name: "mycookie",
Value: "SomeValue",
Path: "/mysite",
HttpOnly: true,
Secure: true,
}
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.SetCookie(w, validCookie)
w.Header().Set("Content-Type", "text/plain")
w.WriteHeader(200)
}))
defer ts.Close()
fmt.Printf("EqualL Cookies: %t\n", reflect.DeepEqual(validCookie, validCookie))
if got := GetCookie(ts.URL); !reflect.DeepEqual(got, validCookie) {
log.Fatalf("NOT THE SAME\n got = '%v'\nwant = '%v'", got, validCookie)
}
}
遊樂場鏈接:https://play.golang.org/p/T4dbZycMuT
我已經檢查了DeepEqual函數的文檔,從我能看到2個結構/指針應該是相同的(特別是考慮到cookie沒有不導出字段)。
我可以更改函數來比較Cookie字符串,但是我想知道是否有簡單的解釋爲什麼這不起作用或者是由於文檔指定的「不一致性」。 也有任何方法來測試結構,而不是在這個情況下的字符串表示(或者我犯了一個錯誤,也許)?