如何从Go二进制文件捕获代码覆盖率?

Ell*_*nce 5 code-coverage go

我知道在运行单元测试时可以捕获代码覆盖率指标。但是,当我们针对二进制文件本身进行集成测试(复数)时,我们想知道覆盖范围是什么,例如:

go build
./mybin somefile1
./mybin somefile2
# ... test a bunch more files and input flags
Run Code Online (Sandbox Code Playgroud)

是否有可能做到这一点?可以仅为测试目的而构建二进制文件,因此可以根据需要选择任何编译选项。

Fli*_*mzy 6

Go 覆盖工具仅与测试包结合使用。但并不是所有的希望都破灭了。

如果您可以将您的集成测试强制转换为 go 测试框架,那么您应该拥有所需的一切。这不应该像听起来那么难。

基本上:

  1. 编写一个测试文件,main()在 go 例程中执行您的函数:

    func TestMainApp(t *testing.T) {
        go main()
        // .. then start your integration tests
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在测试中运行您的真实应用程序后,开始您的集成测试——可能在exec.Cmd的帮助下。

  3. 收集您的覆盖率统计数据。

  4. 利润。

这篇一年前的Go 覆盖外部测试文章概述了类似的方法。