私は、書込みユニットが定義の一部としてコンテキストを使用するハンドラをテストする方法を理解しようとしていました。定義内のコンテキストを使用してハンドラでhttptestを使用して単体テストを書く方法?
例
func Handler(ctx context.Context, w http.ResponseWriter, r *http.Request)
私はに私がエラーを与えられたこのようなテストを実施しようとすると、それは
//copied right from the article
rr := httptest.NewRecorder()
// e.g. func GetUsersHandler(ctx context.Context, w http.ResponseWriter, r *http.Request)
handler := http.HandlerFunc(GetUsersHandler)
のような単純なようで作られたこのarticle accrossに来たいくつかのグーグルでの後
cannot convert Handler (type func("context".Context, http.ResponseWriter, *http.Request)) to type http.HandlerFunc
は、だから私はHandleFunc
の定義に運転し、
// The HandlerFunc type is an adapter to allow the use of
// ordinary functions as HTTP handlers. If f is a function
// with the appropriate signature, HandlerFunc(f) is a
// Handler that calls f.
type HandlerFunc func(ResponseWriter, *Request)
// ServeHTTP calls f(w, r).
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
f(w, r)
}
を見つけたので、エラーが理にかなって...しかし、私はこのハンドラをテストする必要があると私ができるように、それはいないようですので、今、私は失うによ記事を参考にしてhttptest
を使用してください。
httptest
パッケージでハンドラをテストする方法はありますか?もし私がどのようにテストする必要がありますか?私はGo1.9
UPDATE
//Just so its clear this is what I'm currently trying to do
data := url.Values{}
data.Set("event_type", "click")
data.Set("id", "1")
data.Set("email", "")
req, err := http.NewRequest("PUT", "/", bytes.NewBufferString(data.Encode()))
Expect(err).To(BeNil())
rr := httptest.NewRecorder()
// this is the problem line.
// The definition of Handler isn't (w ResponseWriter, r *Request)
// So I can't create a handler to serve my mock requests
handler := http.HandlerFunc(Handler)
handler.ServeHTTP(rr, req)
'http.Request'がすでにコンテキストをサポートしているときにハンドラを別のパラメータとして渡すのはなぜですか? – Adrian
これは、Go1.7以前の従来のコードです。アプリ全体がこのように構築されています。私は新しいルートを追加するだけです。それでも、この記事は、これが行われ、例として行われたようなものだったように見えました。記事の有効期限はまだ分かりません。 – reticentroot