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

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

测试覆盖率

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

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

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

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

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值