ホームページ >バックエンド開発 >Golang >Go Http.Request.FormFile テストでファイルのアップロードをシミュレートする方法

Go Http.Request.FormFile テストでファイルのアップロードをシミュレートする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 08:21:021047ブラウズ

How to Simulate File Upload in Go Http.Request.FormFile Tests?

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

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