ホームページ  >  記事  >  バックエンド開発  >  Go テストで「http.Request.FormFile」をモックする方法は?

Go テストで「http.Request.FormFile」をモックする方法は?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 12:31:02824ブラウズ

How to Mock `http.Request.FormFile` in Go Tests?

Go での Request.FormFile のテスト

http.Request.FormFile を使用したファイルのアップロードを伴うエンドポイントのテストでは、値を含むリクエストを生成する必要があります。

httptest ライブラリは、完全な FormFile 構造体を模擬する簡単な方法を提供しません。ただし、mime/multipart パッケージを使用すると、CreateFormFile 関数を使用して FormFile を作成できます。

<code class="go">func (w *Writer) CreateFormFile(fieldname, filename string) (io.Writer, error)</code>

この関数はフィールド名とファイル名をパラメータとして受け取り、使用できる io.Writer を返します。実際のファイル データを書き込みます。

テストで CreateFormFile を使用するには、データを io.ReaderWriter バッファに書き込むか、io.Pipe を使用します。次の例では、io.Pipe を使用します。

<code class="go">func TestUploadImage(t *testing.T) {
    // Set up a pipe to avoid buffering
    pr, pw := io.Pipe()
    // Create a multipart form data writer using the pipe as the destination
    writer := multipart.NewWriter(pw)

    go func() {
        defer writer.Close()
        // Create the 'fileupload' form data field
        part, err := writer.CreateFormFile("fileupload", "someimg.png")
        if err != nil {
            t.Error(err)
        }
        // Write an image to the form data field using an io.Writer interface
        // (e.g., png.Encode)
    }()

    // Read from the pipe, which contains the multipart form data generated by the multipart writer
    request := httptest.NewRequest("POST", "/", pr)
    request.Header.Add("Content-Type", writer.FormDataContentType())

    response := httptest.NewRecorder()
    handler := UploadFileHandler()
    handler.ServeHTTP(response, request)

    // Assert HTTP status code and other test verifications
}</code>

この例では、イメージ パッケージを使用してイメージ ファイルを動的に生成し、io.Writer インターフェイスを通じてマルチパート ライターに書き込みます。同様のアプローチを使用して、他の形式 (CSV など) でデータをその場で作成することもできます。

以上がGo テストで「http.Request.FormFile」をモックする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。