Testing Go Http.Request.FormFile
マルチパート フォーム データを想定するエンドポイントをテストするには、ファイルのアップロードをシミュレートする必要があります。これは、httptest ライブラリを使用してフォーム ファイルでポスト リクエストを生成することで実現できます。
完全な FormFile 構造体をモックする代わりに、mime/multipart パッケージを利用してフォーム ファイルを作成できます。 CreateFormFile 関数は、指定されたフィールド名とファイル名を持つマルチパート フィールド ヘッダーを生成します。
CreateFormFile によって作成された io.Writer を httptest.NewRequest に渡すことで、フォーム ファイルを使用したポスト リクエストをシミュレートできます。
これを実装する方法の例を次に示します。
<code class="go">func TestUploadImage(t *testing.T) { // Set up an io.Pipe to avoid buffering pr, pw := io.Pipe() writer := multipart.NewWriter(pw) go func() { defer writer.Close() part, err := writer.CreateFormFile("fileupload", "someimg.png") if err != nil { t.Error(err) } img := createImage() err = png.Encode(part, img) if err != nil { t.Error(err) } }() request := httptest.NewRequest("POST", "/", pr) request.Header.Add("Content-Type", writer.FormDataContentType()) response := httptest.NewRecorder() handler := UploadFileHandler() handler.ServeHTTP(response, request) if response.Code != 200 { t.Errorf("Expected %s, received %d", 200, response.Code) } if _, err := os.Stat("./uploads/someimg.png"); os.IsNotExist(err) { t.Error("Expected file ./uploads/someimg.png' to exist") } }</code>
この関数は、イメージ パッケージを使用してイメージを動的に作成し、png.Encode を使用してマルチパート ライターに直接書き込みます。これは、実際のファイル I/O を必要とせずに、画像ファイルのアップロードをシミュレートします。
以上がGo Http.Request.FormFile テストでファイルのアップロードをシミュレートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。