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 サイトの他の関連記事を参照してください。