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