利用go test測試文件上傳

我們都知道go語言的testing包提供了豐富的測試功能,方便我們在開發(fā)時進行單元測試,但是之前一直沒有看到過如何進行文件上傳單元測試相關的文章,直到看到了B站的這個視頻「教程」Go語言基礎 (O'Reilly),不得不說這個go語言學習視頻比國內(nèi)的不知要高到哪里去了,講解清晰,涵蓋范圍廣,學完感覺水平瞬間上了一個等級。

文件上傳服務端代碼

func upload(w http.ResponseWriter, r *http.Request) {
    file, head, err := r.FormFile("my_file")
    if err != nil {
        fmt.Sprintln(err)
        fmt.Fprintln(w, err)

        return
    }

    localFileDir := "/tmp/upload/"
    err = os.MkdirAll(localFileDir, 0777)
    if err != nil {
        fmt.Sprintln(err)
        fmt.Fprintln(w, err)

        return
    }

    localFilePath := localFileDir + head.Filename

    localFile, err := os.Create(localFilePath)
    if err != nil {
        fmt.Sprintln(err)
        fmt.Fprintln(w, err)

        return
    }
    defer localFile.Close()

    io.Copy(localFile, file)
    fmt.Fprintln(w, localFilePath)

}

測試代碼

func TestUpload(t *testing.T) {
    path := "/home/ubuntu/test.go"http://要上傳文件所在路徑
    file, err := os.Open(path)
    if err != nil {
        t.Error(err)
    }

    defer file.Close()
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    part, err := writer.CreateFormFile("my_file", filepath.Base(path))
    if err != nil {
                writer.Close()
        t.Error(err)
    }
    io.Copy(part, file)
    writer.Close()

    req := httptest.NewRequest("POST", "/upload", body)
    req.Header.Set("Content-Type", writer.FormDataContentType())
    res := httptest.NewRecorder()

    upload(res, req)

    if res.Code != http.StatusOK {
        t.Error("not 200")
    }

    t.Log(res.Body.String())
    // t.Log(io.read)

}

測試代碼中關鍵的部分在于使用了"mime/multipart"包

  1. 首先創(chuàng)建一個writer
    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
  1. 然后往multipart中寫入域"my_file"和文件名filepath.Base(path)

"my_file"和服務端中
file, head, err := r.FormFile("my_file")
對應。

3.最后上傳文件


    io.Copy(part, file)
    writer.Close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,361評論 25 708
  • Swift版本點擊這里歡迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh閱讀 26,317評論 7 249
  • 喜歡聽著老歌,看著老照片, 喜歡一個人獨處時候的安靜,唯有如此,貌似我才能好好靜下心來好好想想自己的人生。 現(xiàn)在的...
    諾卟輕許閱讀 352評論 1 0
  • 我是一個不勤快的懶惰人。很多時候腦子已經(jīng)飛奔到腳趾尖,行動還依然悠哉在腦神經(jīng)的曲線上。它總是不慌不忙,有時又...
    庶寧閱讀 195評論 0 0

友情鏈接更多精彩內(nèi)容