emahiro/b.log

日々の勉強の記録とか育児の記録とか。

httptest で server を立てるときに Port を固定する

Overview

endpoint のテストをするときに httpserver でサーバーを立ち上げて request と response の検証をする、ということをするときに、httptest で立ち上げるサーバーに割り当てられる port はランダムに決まります。
ただ、テストによっては port を固定したい時もあるので、固定する方法を実装してみました。

port を固定する方法

func TestServer(t *testing.T) {
    listener, err := net.Listen("tcp", "127.0.0.1:9999")
    if err != nil {
        t.Fatal(err)
    }

    mux := http.NewServeMux()
    ts := httptest.NewUnstartedServer(mux)
    ts.Listener = listener
    ts.Start()
    t.Cleanup(func() {
        ts.Close()
    })
}

上記のような方法で固定できます。
固定できるというか、指定した Listener を httptest server で立ち上げた server で指定することでその port で TCP のやり取りをできるようになる、という感じです。

やってみると簡単でした。