如何提高go代码覆盖率_聊聊Go代码覆盖率技术与最佳实践

覆盖率技术基础

截止到Go1.15.2以前,关于覆盖率技术底层实现,以下知识点您应该知道:

  • go语言采用的是插桩源码的形式,而不是待二进制执行时再去设置breakpoints。这就导致了当前go的测试覆盖率收集技术,一定是侵入式的,会修改目标程序源码。曾经有同学会问,插过桩的二进制能不能放到线上,所以建议最好不要。
  • 到底什么是"插桩"?这个问题很关键。大家可以任意找一个go文件,试试命令go tool cover -mode=count -var=CoverageVariableName xxxx.go,看看输出的文件是什么?
    • 笔者以这个文件为例https://github.com/qiniu/goc/blob/master/goc.go, 得到以下结果:
    package main

    import "github.com/qiniu/goc/cmd"

    func main() {
    CoverageVariableName.Count[0]++;
        cmd.Execute()
    }

    var CoverageVariableName = struct {
    
        Count     [1]uint32
        Pos       [3 * 1]uint32
        NumStmt   [1]uint16
    } {
    
        Pos: [3 * 1]uint32{
    
            21, 23, 0x2000d, // [0]
        },
        NumSt
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值