3 回答

TA貢獻2003條經驗 獲得超2個贊
我自己的解決方案是將該方法作為參數,允許在測試時注入“模擬”。另外,創建一個導出的方法作為公共門面和一個未導出的方法用于測試。
例子:
func Foo() int {
return foo(os.Getpid)
}
func foo(getpid func() int) int {
return getpid()
}

TA貢獻1993條經驗 獲得超6個贊
看起來,看看os.Getwd 測試可以為您提供一些如何測試代碼的示例。尋找函數TestChdirAndGetwd
和TestProgWideChdir
。
從閱讀這些內容來看,測試似乎創建了臨時文件夾。
因此,一種務實的方法是創建臨時文件夾,就像上面提到的測試一樣,然后破壞它們,從而os.Getwd
引發錯誤以供您進行測試。
請小心執行這些操作,因為它們可能會弄亂您的系統。我建議在輕量級容器或虛擬機中進行測試。

TA貢獻1880條經驗 獲得超4個贊
這是 go 編譯器的限制,谷歌開發人員不想允許任何鉤子或猴子補丁。如果單元測試對你很重要——那么你必須選擇一種源代碼中毒的方法。所有這些方法如下:
您不能直接使用全局包。
您必須創建方法的隔離版本并對其進行測試。
方法的生產版本包括方法的獨立版本和全局包。
但最好的解決方案是完全忽略 go 語言(如果可能的話)。
- 3 回答
- 0 關注
- 246 瀏覽
添加回答
舉報