インターネット上にあるサービスに対して 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 呼び出しで必要なデータで応答するように、関数の最初の行を変更するにはどうすればよいですか?