ホームページ  >  記事  >  バックエンド開発  >  Go テストでファイルのアップロードをシミュレートするには?

Go テストでファイルのアップロードをシミュレートするには?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 01:48:02942ブラウズ

How to Simulate File Uploads in Go Tests?

Go でのファイル アップロードのテスト

ファイル アップロードを処理するエンドポイントをテストする場合、Request.FormFile フィールドを設定する必要があります。残念ながら、完全な FormFile 構造体を単純にモックするのは、非常に複雑なアプローチです。代わりに、mime/multipart パッケージを利用して、必要な FormFile インスタンスを作成することができます。

CreateFormFile の使用

Writer 型のメンバーである CreateFormFile 関数。は、特定のフィールド名とファイル名を持つフォームデータ ヘッダーを生成する便利な方法を提供します。結果の io.Writer は httptest.NewRequest 関数に渡すことができます。

パイプを使用した例

1 つの方法は、FormFile を io.ReaderWriter バッファに書き込むことです。または io.Pipe を使用します。次の例は、後者の方法を示しています。

<code class="go">// Create a pipe to prevent buffering.
pr, pw := io.Pipe()

// Transform data to multipart form data and write it to the pipe.
writer := multipart.NewWriter(pw)
defer writer.Close()

go func() {
    // Create the "fileupload" form data field.
    part, err := writer.CreateFormFile("fileupload", "someimg.png")
    if err != nil {
        t.Error(err)
    }

    // Generate the image bytes.
    img := createImage()

    // Encode the image to the form data field writer.
    err = png.Encode(part, img)
    if err != nil {
        t.Error(err)
    }
}

// Read from the pipe into a new httptest.Request.
request := httptest.NewRequest("POST", "/", pr)
request.Header.Add("Content-Type", writer.FormDataContentType())</code>

リクエストの処理

リクエスト内の FormFile データを使用すると、テスト済みのエンドポイントで通常どおり処理できます。 。このサンプル関数は、アップロード ディレクトリにファイルを作成する方法を示しています。

追加メモ

このアプローチでは、その場でフォーム データを作成し、それを一時ファイルを操作する必要のないテスト フレームワーク。同様に、encoding/csv を使用して、ファイル システムから読み取る必要なく CSV ファイルを生成できます。

以上がGo テストでファイルのアップロードをシミュレートするには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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