golangでhttpサーバをテストしていますが、すべて迷惑なことを除いてすべてがかなりスムーズです。golangのHTTPハンドラを単体テスト用にリセットする
私は、サーバーを設定していたときに、いくつかの時点で、私はhttp.Handle("/", myrouter)
でハンドラを登録http.ListenAndServe
を行う前に、問題は、設定方法が再び呼び出され、次のテスト、に、私は次のパニックを受けるということです。
パニックます。http:/ための複数の登録[復元]
私はクリーンな環境で各テストを実行したいのですが、http.DefaultServeMux
を取り壊すための方法を発見していない、そこにありますこれを行うための便利な方法は、 "nulling" somet新しい環境ですべてのテストが実行されるようにテスト環境をヒンジまたは再構成する
編集: いくつかのコンテキストを与えることを、尋ねたとして、私はここにいくつかのコードと私が書きたかったテストを投稿し、私は私もわから上じゃないという事実を明確にタフでなければなりません実装の選択はここで行われました(私は少し異なった方法でサーバを設定したと思いますが、コードは私のものではありません)。私はパニックを取得し、ハンドルが二回http
に結合呼んでいるので、しかし
func TestThatServerIsInitializedWithDefaultPort(t *testing.T) {
sut, _ := NewHTTPServer(nil)
if sut.port != 80 {
t.Fatal("default port not configured")
}
}
func TestThatServerDefaultPortIsOverriddenWithConfig(t *testing.T) {
mockPort := 8080
c := Config{
Port: &mockPort,
}
sut, _ := NewHTTPServer(&c)
if sut.port != 8080 {
t.Fatal("the port has not been overridden with the one passed in configuration")
}
}
:
package httpserver
import (
"github.com/gorilla/mux"
"github.com/private/private/httpserver/rpchandler"
"net/http"
)
type HTTPServer struct {
router *mux.Router
port int
}
// Config is used to override the default port of the http server.
type Config struct {
Port *int
}
func NewHTTPServer(config *Config) (*HTTPServer, error) {
hs := &HTTPServer{
port: 80,
}
// Overwrite default port if passed.
if config != nil && config.Port != nil {
hs.port = *config.Port
}
err := hs.router = mux.NewRouter().StrictSlash(false)
if err != nil {
return nil, err
}
// other mux router configs here...
http.Handle("/", hs.router)
return hs, nil
}
は今、私が書きたかったテストは次のように、非常に簡単でした。
テストはどのように定義されていますか?あなたを助けるためのコードが必要です。サーバの設定とハンドラコードのテストの両方を送信してください。 – shadyyx
は、文脈のためのいくつかのコードを追加しました。申し訳ありません、私はそれを前にしておくべきでした! –