前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023年3月8日 Go生态洞察:Go集成测试中的代码覆盖率分析

2023年3月8日 Go生态洞察:Go集成测试中的代码覆盖率分析

作者头像
猫头虎
发布2024-04-08 15:14:09
1440
发布2024-04-08 15:14:09
举报

2023年3月8日 Go生态洞察:Go集成测试中的代码覆盖率分析 🦉

摘要

🐾 大家好,我是猫头虎博主!今天我们来聊聊Go语言中集成测试的代码覆盖率。这是一个让开发者头疼的话题,但却至关重要。我将深入探讨Go 1.20带来的新特性,这些新特性为我们提供了更广泛的代码覆盖测试能力。如果你想要了解Go中如何优化代码质量,那就继续往下看吧!🐱‍💻

引言

代码覆盖率工具是开发者用来确定在执行特定测试套件时,源代码基的哪一部分被执行(覆盖)的重要工具。虽然Go一直以来都支持包级别的代码覆盖测量,但对于更大的Go应用程序,尤其是集成测试,这种工具就显得力不从心。而最新的Go 1.20版本终于为此提供了解决方案。

正文

Go集成测试与代码覆盖率 🧩
集成测试的挑战

Go语言的集成测试通常涉及构建完整的应用程序二进制文件,然后在一组代表性输入上运行这些二进制文件,以确保所有组件包能够正确协同工作。但由于集成测试二进制文件是使用“go build”而非“go test”构建的,Go的工具箱在收集这些测试的覆盖率方面存在局限性。

Go 1.20的突破

Go 1.20引入了使用“go build -cover”构建带有覆盖率工具的程序的能力。这意味着我们现在可以将这些工具化的二进制文件纳入集成测试中,从而扩大覆盖率测试的范围。

实例演示 🚀
mdtool的集成测试

让我们以“mdtool”这个markdown处理工具为例,展示如何为其编写简单的集成测试,并从中收集覆盖率数据。该工具旨在展示客户端如何使用gitlab.com/golang-commonmark/markdown这个markdown转HTML的库。

设置mdtool

首先,我们下载“mdtool”的副本,并切换到特定版本,以保证步骤的可重复性:

代码语言:javascript
复制
$ git clone https://gitlab.com/golang-commonmark/mdtool.git
...
$ cd mdtool
$ git tag example e210a4502a825ef7205691395804eefce536a02f
$ git checkout example
...
$
简单的集成测试脚本

我们为“mdtool”编写了一个简单的集成测试脚本,该脚本构建“mdtool”二进制文件,然后在一组输入markdown文件上运行它,确保它能产生一些输出并且不会崩溃。

代码语言:javascript
复制
$ cat integration_test.sh
#!/bin/sh
BUILDARGS="$*"
...
$
收集覆盖率数据

我们编写了另一个包装脚本,用于调用之前的脚本,为工具构建覆盖率并进行后处理:

代码语言:javascript
复制
$ cat wrap_test_for_coverage.sh
#!/bin/sh
...
$
深入覆盖率数据 📊
覆盖率数据文件的处理

完成覆盖率集成测试后,我们可以以各种方式后处理原始数据文件,例如转换为文本格式的覆盖率配置文件或合并原始配置文件。

转换配置文件

使用`go tool cov

data textfmt`命令,我们可以将GOCOVERDIR目录中的文件生成文本格式的配置文件。

代码语言:javascript
复制
$ go tool covdata textfmt -i=covdatafiles -o=cov.txt
...
$
合并原始配置文件

使用go tool covdata merge命令,我们可以合并来自不同集成测试运行的数据文件。

代码语言:javascript
复制
$ go tool covdata merge -i=covdatafiles -o=merged
...
$

总结

通过本文,我们了解了Go 1.20如何突破以往的限制,支持从大型集成测试中收集覆盖率数据。这对于理解复杂测试的有效性以及它们如何覆盖源代码至关重要。这是我在猫头虎的Go生态洞察专栏中的又一篇力作,详情点击这里

关键点

说明

Go集成测试

构建完整的应用程序二进制文件,测试整个程序的行为

Go 1.20新特性

使用“go build -cover”构建带覆盖率工具的程序

mdtool示例

一个简单的markdown处理工具,用于演示集成测试和覆盖率收集

覆盖率数据处理

转换和合并覆盖率数据文件以提高分析效率

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2023年3月8日 Go生态洞察:Go集成测试中的代码覆盖率分析 🦉
    • 摘要
      • 引言
        • 正文
          • Go集成测试与代码覆盖率 🧩
          • 实例演示 🚀
          • 深入覆盖率数据 📊
        • 总结
        相关产品与服务
        腾讯云服务器利旧
        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档