利用go test測試文件上傳

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

文件上傳服務(wù)端代碼

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)

}

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

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

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

3.最后上傳文件


    io.Copy(part, file)
    writer.Close()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艇纺,一起剝皮案震驚了整個濱河市婆芦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌喂饥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肠鲫,死亡現(xiàn)場離奇詭異员帮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)导饲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門捞高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渣锦,你說我怎么就攤上這事硝岗。” “怎么了袋毙?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵型檀,是天一觀的道長。 經(jīng)常有香客問我听盖,道長胀溺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任皆看,我火速辦了婚禮仓坞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腰吟。我一直安慰自己无埃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嫉称,像睡著了一般侦镇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澎埠,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天虽缕,我揣著相機(jī)與錄音,去河邊找鬼蒲稳。 笑死氮趋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的江耀。 我是一名探鬼主播剩胁,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祥国!你這毒婦竟也來了昵观?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤舌稀,失蹤者是張志新(化名)和其女友劉穎啊犬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壁查,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡觉至,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睡腿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片语御。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖席怪,靈堂內(nèi)的尸體忽然破棺而出应闯,到底是詐尸還是另有隱情,我是刑警寧澤挂捻,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布碉纺,位于F島的核電站,受9級特大地震影響刻撒,放射性物質(zhì)發(fā)生泄漏惜辑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一疫赎、第九天 我趴在偏房一處隱蔽的房頂上張望盛撑。 院中可真熱鬧,春花似錦捧搞、人聲如沸抵卫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介粘。三九已至殖氏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姻采,已是汗流浹背雅采。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慨亲,地道東北人婚瓜。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像刑棵,于是被迫代替她去往敵國和親巴刻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

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