云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

中间件_服务器共享文件夹_三重好礼

小七 141 0

通过外部测试覆盖

Go测试覆盖的实现非常巧妙:当被要求时,Go编译器将对源代码进行预处理,以便在执行每个代码部分时,在覆盖位图中设置一个位。它集成在go测试工具中:go test-cover启用它,而-coverprofile=允许您编写一个配置文件,然后使用go tool cover进行检查。这使得获得单元测试覆盖率变得非常容易,但是对于针对程序的主版本运行的测试,比如端到端测试,没有简单的方法来获取覆盖率数据。正确的修复方法是添加-cover预处理支持到go-build,并可能将覆盖率配置文件作为运行时公开/pprof.剖面图,但在Go1.6版中没有这样的支持。这里是我们在RRDNS的测试套件中使用了一段时间的黑客攻击,RRDNS是我们的自定义Go DNS服务器。我们创建一个执行main()的虚拟测试,把它放在build标记后面,用go test-c-cover编译一个二进制文件,然后只运行该测试,而不是运行常规的二进制文件。这是RRDN_测试.go文件看起来像://+构建testrunmain主包装导入"测试"函数TestRunMain(t*testing.t){主()}我们像这样编译二进制文件$go test-coverpkg="rrdns/…"-c-tags testrunmain rrdns然后,当我们想要收集覆盖率信息时,我们执行这个而不是./rrdns(并像往常一样运行我们的测试电池):$ ./rrdns.测试-测试.运行"^TestRunMain$"-test.coverprofile=系统.出去您必须从main()干净地返回,以便将概要文件写入磁盘;在RRDNS中,我们通过捕捉SIGINT来实现这一点。您仍然可以正常使用命令行参数和标准输入,只需注意,您将从测试框架中获得两行额外的输出。最后,由于您可能还运行单元测试,所以您可能希望将覆盖率配置文件与gocovmerge合并(摘自#6909问题):$去拿github.com/wadey/gocovmerge$gocovmerge公司单位输出系统输出> 全力以赴$go工具封面-html全力以赴如果找到创新的方法来测试大型网络服务听起来很有趣,那就知道我们正在伦敦、旧金山和新加坡招聘。