0

インターネット上にあるサービスに対して HTTP GET 呼び出しを行い、結果を解析する Go 関数をいくつか作成しました。

現在、これらの関数のテスト ケースを作成しています。私のテスト ケースでは、httptestこれらの外部サービスへの呼び出しをシミュレートするために go パッケージを使用しています。以下は私のコードです。簡潔にするために、エラー チェックは意図的に削除されています。ここは遊び場です。

package main

import (
    "fmt"
    "io"
    "context"
    "net/http"
    "net/http/httptest"
)

func handlerResponse() http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        w.WriteHeader(http.StatusOK)
        w.Write([]byte(`{"A":"B"}`))
    })
}

func buildMyRequest(ctx context.Context, url string) *http.Request {
    request, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
    return request
}

func myPrint(response *http.Response) {
    b := make([]byte, 60000)
    for {
        _, err := response.Body.Read(b)
        if err == io.EOF {
            break
        }
    }
    fmt.Println(string(b))
}

func main() {
    srv := httptest.NewServer(handlerResponse())            
    client := http.Client{}

    myResponse1, _ := client.Do(buildMyRequest(context.Background(), srv.URL))
    fmt.Println("myResponse1:")
    myPrint(myResponse1)
    
    myResponse2, _ := client.Do(buildMyRequest(context.Background(), srv.URL))
    fmt.Println("myResponse2:")
    myPrint(myResponse2)

}

これは、生成される出力です。

myResponse1:
{"A":"B"}
myResponse2:
{"A":"B"}

ご覧のとおり、ダミーの HTTP 応答データ{"A":"B"}をいくつか作成しました。HTTP 要求を に送信するsrv.URLと、ダミー データで応答するエフェメラル HTTP サーバーに実際にヒットします。涼しい!

2 番目の HTTP 要求を に送信するsrv.URLと、同じダミー データで再び応答します。しかし、ここで私の問題が発生します。エフェメラル HTTP サーバーが 2 回目{"C":"D"}と 3 回目{"E":"F"}にリクエストを受信したときに異なるデータを返すようにします。

main()サーバーが後続の HTTP 呼び出しで必要なデータで応答するように、関数の最初の行を変更するにはどうすればよいですか?

4

1 に答える 1