3 回答

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
測(cè)試依賴(lài)于文件系統(tǒng)的功能的最簡(jiǎn)單方法是在每個(gè)測(cè)試周?chē)砑右恍┰O(shè)置和拆卸,在運(yùn)行測(cè)試之前將必要的文件放在適當(dāng)?shù)奈恢?,然后在運(yùn)行測(cè)試后刪除它們。
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
})
}

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
我知道“不訪問(wèn)文件系統(tǒng)”是很多人對(duì)“單元測(cè)試”定義的一部分。如果你的職業(yè)不是尋找和捍衛(wèi)定義:忘掉那個(gè)限制吧。文件系統(tǒng)訪問(wèn)快速且良好,go 工具甚至對(duì)名為“testdata”的文件夾進(jìn)行特殊處理:此類(lèi)文件夾應(yīng)該包含測(cè)試期間要使用的測(cè)試數(shù)據(jù)。
Go(和他們的用戶(hù))在區(qū)分“單元”和“集成”測(cè)試時(shí)并不是很迂腐??纯慈绾螠y(cè)試這些東西的標(biāo)準(zhǔn)庫(kù)。編寫(xiě)相關(guān)測(cè)試比在 fs 訪問(wèn)上變得幼稚更重要。(請(qǐng)注意,文件系統(tǒng)和數(shù)據(jù)庫(kù)在技術(shù)上是外部系統(tǒng),但在現(xiàn)實(shí)生活中,沒(méi)有文件系統(tǒng)就無(wú)法編譯 Go 代碼,因此將測(cè)試與這個(gè)“外部系統(tǒng)”隔離是荒謬的。)

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊
那么,您可能會(huì)尋找一種以安全方式操作文件系統(tǒng)的方法,或者在其他地方尋找解決方案。這個(gè)功能的職責(zé)是什么?它應(yīng)該準(zhǔn)備一個(gè) zip 文件還是將其寫(xiě)入文件系統(tǒng)?
我建議你應(yīng)該從這個(gè)函數(shù)中取出文件創(chuàng)建并將函數(shù)更改為:
func Zipper(src string, dst io.Writer, target string) error { ziper := zip.NewWriter(dst) defer ziper.Close()
這樣,出于測(cè)試目的,您可以提供一個(gè)簡(jiǎn)單的緩沖區(qū),而在生產(chǎn)中使用您心愛(ài)的文件系統(tǒng)!
- 3 回答
- 0 關(guān)注
- 176 瀏覽
添加回答
舉報(bào)