1 回答

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊
它本身不是 Go 的東西,這取決于您的偏好,但是:
一個(gè)。不要測(cè)試main。main 應(yīng)該只調(diào)用經(jīng)過測(cè)試的代碼,最好是在其他包中。為這些包提供盡可能多的代碼覆蓋率,并盡可能讓 main 變得微不足道。無論覆蓋范圍如何,這是一個(gè)很好的做法。所以這不是一個(gè)真正的問題。
灣。不要log.Fatal用于可測(cè)試的代碼,只返回錯(cuò)誤。您可以保留log.Fatal應(yīng)用程序初始化代碼,即 - in main:)。因此,如果 main 調(diào)用readConfig失敗,它只會(huì)返回一個(gè)錯(cuò)誤(非??蓽y(cè)試?。?。添加的應(yīng)用程序行為log.Fatal是 main 的工作——配置讀取器不應(yīng)該處理諸如決定我們是否應(yīng)該退出應(yīng)用程序之類的事情,對(duì)吧?它只是讀取配置并告訴您它是否成功。應(yīng)用程序決定如何處理它。
所以你的代碼可能看起來像:
func readConfig(path string) (Config, error) {
var cfg Config
file, err := ioutil.ReadFile(path)
if err != nil {
return cfg, err
}
err = json.Unmarshal(file, &cfg)
if err != nil {
return cfg, err
}
return cfg, nil
}
func main() {
config, err := readConfig("config.json")
if err != nil {
log.Fatal(err)
}
}
現(xiàn)在您已經(jīng)將邏輯與應(yīng)用程序行為分離,并且readConfig完全可測(cè)試。
- 1 回答
- 0 關(guān)注
- 187 瀏覽
添加回答
舉報(bào)