go语言的测试覆盖 (golang test coverage)

本文介绍了Go语言中的测试覆盖率计算,从1.2版本开始,Go提供了内置的覆盖率支持。测试覆盖率是衡量代码在执行测试时被触达的程度,通常以百分比表示。文章指出,早期的覆盖率工具通过在二进制文件中插入“桩”来跟踪代码执行,但这种方法存在精度和可移植性问题。对于使用gccgo的用户,可以借助GNUgcov获取覆盖率信息,而标准的Go编译器套装从1.2版开始提供此功能。

来源:http://blog.golang.org/cover

测试覆盖率

测试覆盖率是指当运行测试用例时,代码(类,包,模块)中有多少被执行到。覆盖率通常用百分比来表示。例如当我们说一个包的覆盖率是85%的时候,就是说测试用例让包中85%的代码都运行过了。Go语言中对于测试覆盖率有比较不错的支持,在1.2版本开始跟其他工具一起发布。

计算测试覆盖率的一种常见方法是在生成的二进制文件中放入一些“桩”。例如GNU的gcov会在目标程序的各个分支设置“断点”。 如果分支被执行到,那么对应的“断点”就被清除掉,这个分支也被标记成“已经覆盖”。

这个方法被广泛使用在多种语言的覆盖率工具中。甚至,在Go语言的一个早期测试覆盖工具中也是这么实现的。但是这种方法有问题。因为在二进制层次上分析程序的执行非常有挑战性,所以这种方法很难实现。

另外,追踪二进制执行并且映射到源代码,也不是一件简单的事情。

这种方法另外的一些问题,例如调试信息不精确,内联函数让二进制的分析更加复杂。更重要的一点是,这种方法不可移植。对于每一种计算机架构,(某种程度上)每一种操作系统来说,这种方法都需要重新实现,因为每种系统(硬件或软件)对于调试的支持都不尽相同。

如果你使用gccgo那么GNU gcov也能够给你提供测试覆盖信息。但是如果你使用Go编译器套装(compiler suite), 直到1.2版本你才有这个福气。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值