栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

进行单元测试致命伤并测试main()

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

进行单元测试致命伤并测试main()

就其本身而言,这并不是Go的事情,它取决于您的偏好,但是:

一个。不要测试

main
。main应该只调用已测试的代码,最好在其他软件包中。对这些软件包提供尽可能多的代码覆盖率,并尽可能使main保持琐碎。无论覆盖范围如何,这都是一个好习惯。因此,这并不是真正的问题。

b。不要

log.Fatal
用于可测试的代码,只需返回错误。您可以保留
log.Fatal
应用程序初始化代码,即
main
-in
:)。因此,如果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
可以完全测试。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号