我对大多数代码都有单元测试。但是我无法弄清楚如何为main包中的main()中的某些代码生成单元测试覆盖率。
主要功能非常简单。它基本上是一个选择块。它读取标志,然后调用另一个函数/执行某些操作,或仅在屏幕上打印帮助。但是,如果命令行选项设置不正确,它将退出并显示各种错误代码。因此,需要进行子过程测试。
我尝试了子流程测试技术,但修改了代码,以使其包括覆盖率标志:
cmd := exec.Command(os.Args[0], "-test.run=TestMain -test.coverprofile=/vagrant/ucover/coverage2.out")
但是它不会生成封面资料。我一直无法弄清楚为什么不这样做。它确实为执行主流程的测试生成封面配置文件,但是在子流程中执行的任何代码当然都不会标记为已执行。
我尝试实现尽可能多的代码覆盖率。我不确定我是否缺少某些东西,或者是否有更简单的方法来做到这一点。或者,如果不可能的话。
任何帮助表示赞赏。
谢谢
阿米尔
我会考虑需要测试的逻辑main():
main()
func main() { start(os.Args) } func start(args []string) { // old main() logic }
这样,您可以进行单元测试start()而不会发生变化os.Args。
start()
os.Args