加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

单元测试 – 如何在golang中使用子进程测试时生成单元测试覆盖率

发布时间:2020-12-16 09:27:43 所属栏目:大数据 来源:网络整理
导读:我有大部分代码的单元测试.但我无法弄清楚如何为主包中的main()中的某些代码生成单元测试覆盖率. 主要功能非常简单.它基本上是一个选择块.它会读取标志,然后调用另一个函数/执行某些操作,或者只是在屏幕上打印帮助.但是,如果未正确设置命令行选项,它将以各种
我有大部分代码的单元测试.但我无法弄清楚如何为主包中的main()中的某些代码生成单元测试覆盖率.

主要功能非常简单.它基本上是一个选择块.它会读取标志,然后调用另一个函数/执行某些操作,或者只是在屏幕上打印帮助.但是,如果未正确设置命令行选项,它将以各种错误代码退出.因此,需要进行子流程测试.

我尝试了子流程测试技术,但修改了代码,使其包含覆盖标记:

cmd := exec.Command(os.Args[0],"-test.run=TestMain -test.coverprofile=/vagrant/ucover/coverage2.out")

这是原始代码:https://talks.golang.org/2014/testing.slide#23
上述幻灯片的说明:http://youtu.be/ndmB0bj7eyw?t=47m16s

但它不会生成封面配置文件.我一直无法弄清楚为什么不.它确实为主进程执行测试生成封面配置文件,但当然,在子进程中执行的任何代码都不会标记为已执行.

我尝试尽可能多地实现代码覆盖.我不确定我是否遗漏了某些东西,或者是否有更简单的方法可以做到这一点.或者如果不可能的话.

任何帮助表示赞赏.

谢谢

阿梅尔

解决方法

我会考虑需要从main()中测试的逻辑:

func main() {
    start(os.Args)
}

func start(args []string) {
    // old main() logic
}

这样你就可以在不改变os.Args的情况下对start()进行单元测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读