亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為歸檔函數 fs 創建單元測試

為歸檔函數 fs 創建單元測試

Go
四季花海 2023-03-29 15:16:54
我有以下按預期工作的功能。現在我想為它創建單元測試。問題是我正在使用文件系統,但我無法弄清楚如何使用一些模擬或任何其他解決方案來做到這一點。知道如何在 Go 中簡單地完成這件事嗎?我真的應該創建一個文件然后用單元測試檢查嗎?恐怕在某些系統中它會工作而有些它會損壞(winodos/mac/linux)這是工作功能:func Zipper(src string,artifact string,target string) error {    zf, err := os.Create(artifact)    if err != nil {        return err    }    defer zf.Close()    ziper := zip.NewWriter(zf)    defer ziper.Close()    fileInfo, err := os.Stat(src)    if err != nil {        return err    }    var bs string    if fileInfo.IsDir(); len(target) > 0 {        bs = target    } else {        bs = filepath.Base(src)    }    if bs != "" {        bs += "/"    }    filepath.Walk(src, func(path string, info os.FileInfo, err error) error {        if err != nil {            return err        }        if info.IsDir() {            return nil        }        header, err := zip.FileInfoHeader(info)        if err != nil {            return err        }        if bs != "" {            header.Name = filepath.Join(strings.TrimPrefix(path, bs))        }        header.Method = zip.Deflate        writer, err := ziper.CreateHeader(header)        if err != nil {            return err        }        file, err := os.Open(path)        if err != nil {            return err        }        defer file.Close()        _, err = io.Copy(writer, file)        return err    })    return err}我閱讀了以下內容,但對我的情況沒有太大幫助 如何在 go 中模擬/抽象文件系統?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

測試依賴于文件系統的功能的最簡單方法是在每個測試周圍添加一些設置和拆卸,在運行測試之前將必要的文件放在適當的位置,然后在運行測試后刪除它們。


func TestZipper(t *testing.T) {

    // Create temporary files

    defer func() {

        // Clean up temporary files

    }()

    t.Run("group", func(t *testing.T) { // This is necessary so the above defer function doesn't run too soon

        // your actual tests

    })

}


查看完整回答
反對 回復 2023-03-29
?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我知道“不訪問文件系統”是很多人對“單元測試”定義的一部分。如果你的職業不是尋找和捍衛定義:忘掉那個限制吧。文件系統訪問快速且良好,go 工具甚至對名為“testdata”的文件夾進行特殊處理:此類文件夾應該包含測試期間要使用的測試數據。

Go(和他們的用戶)在區分“單元”和“集成”測試時并不是很迂腐??纯慈绾螠y試這些東西的標準庫。編寫相關測試比在 fs 訪問上變得幼稚更重要。(請注意,文件系統和數據庫在技術上是外部系統,但在現實生活中,沒有文件系統就無法編譯 Go 代碼,因此將測試與這個“外部系統”隔離是荒謬的。)


查看完整回答
反對 回復 2023-03-29
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

那么,您可能會尋找一種以安全方式操作文件系統的方法,或者在其他地方尋找解決方案。這個功能的職責是什么?它應該準備一個 zip 文件還是將其寫入文件系統?

我建議你應該從這個函數中取出文件創建并將函數更改為:

func Zipper(src string, dst io.Writer, target string) error {
    ziper := zip.NewWriter(dst)
        defer ziper.Close()

這樣,出于測試目的,您可以提供一個簡單的緩沖區,而在生產中使用您心愛的文件系統!


查看完整回答
反對 回復 2023-03-29
  • 3 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號