1 回答
TA贡献1906条经验 获得超10个赞
它本身不是 Go 的东西,这取决于您的偏好,但是:
一个。不要测试main。main 应该只调用经过测试的代码,最好是在其他包中。为这些包提供尽可能多的代码覆盖率,并尽可能让 main 变得微不足道。无论覆盖范围如何,这是一个很好的做法。所以这不是一个真正的问题。
湾。不要log.Fatal用于可测试的代码,只返回错误。您可以保留log.Fatal应用程序初始化代码,即 - in main:)。因此,如果 main 调用readConfig失败,它只会返回一个错误(非常可测试!)。添加的应用程序行为log.Fatal是 main 的工作——配置读取器不应该处理诸如决定我们是否应该退出应用程序之类的事情,对吧?它只是读取配置并告诉您它是否成功。应用程序决定如何处理它。
所以你的代码可能看起来像:
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)
}
}
现在您已经将逻辑与应用程序行为分离,并且readConfig完全可测试。
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报