Testing 在golang中测试func main()应该使用哪种方法?
我在main.go中有一个函数Testing 在golang中测试func main()应该使用哪种方法?,testing,go,main,Testing,Go,Main,我在main.go中有一个函数main(),用于执行该任务,所有其他函数都在它下面(我在这里没有包括它们)。因此,当我为main中包含的所有func编写测试时,我可以对它们进行测试。但是代码覆盖率很低,因为它表明我没有覆盖我的mainfunc中的代码 我知道测试库中有一个TestMainfunc应该做这项工作,但我就是不知道如何让它工作,以便测试覆盖funcmain() 下面是我的main() func main() { c, err := getConfig() if err != nil {
main()
,用于执行该任务,所有其他函数都在它下面(我在这里没有包括它们)。因此,当我为main
中包含的所有func
编写测试时,我可以对它们进行测试。但是代码覆盖率很低,因为它表明我没有覆盖我的main
func中的代码
我知道测试库中有一个TestMain
func应该做这项工作,但我就是不知道如何让它工作,以便测试覆盖funcmain()
下面是我的main()
func main() {
c, err := getConfig()
if err != nil {
log.Fatal(err)
}
slideshows, err := getSlideshows(c)
if err != nil {
log.Fatal(err)
}
displaySlideshows(slideshows)
}
此外,我在互联网上没有找到太多关于它的信息,因此,如果这是一个愚蠢的问题,请向我解释为什么这是一个如此愚蠢的问题,以及我应该在哪里寻找解决方案
我将感谢任何帮助 您可以通过Filippo Valsorda查看“”:
我们创建了一个执行main()
的虚拟测试,我们把它放在一个build标记后面,用go test-c-cover
编译一个二进制文件,然后只运行该测试,而不是运行常规二进制文件
下面是rrdns\u test.go
文件的外观:
注意build标记和包之间的空行:
我们按照如下方式编译二进制文件:
$ go test -coverpkg="rrdns/..." -c -tags testrunmain rrdns
然后,当我们想要收集覆盖率信息时,我们执行此操作,而不是执行/rrdns
(并像往常一样运行测试电池):
您必须从main()
干净地返回,配置文件才能写入磁盘;在RRDNS
中,我们通过捕获SIGINT
来实现这一点。您仍然可以正常使用命令行参数和标准输入,只需注意,您将从测试框架中获得两行额外的输出
这类似于提议:
TestMain
与测试无关main()
。如果main()中有真正的功能,请将它移到其他地方以便测试,然后让main调用它。
$ go test -coverpkg="rrdns/..." -c -tags testrunmain rrdns
$ ./rrdns.test -test.run "^TestRunMain$" -test.coverprofile=system.out
func main() {
os.Exit(doFunc());
}