🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
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”的副本,并切换到特定版本,以保证步骤的可重复性:
$ git clone https://gitlab.com/golang-commonmark/mdtool.git
...
$ cd mdtool
$ git tag example e210a4502a825ef7205691395804eefce536a02f
$ git checkout example
...
$
简单的集成测试脚本
我们为“mdtool”编写了一个简单的集成测试脚本,该脚本构建“mdtool”二进制文件,然后在一组输入markdown文件上运行它,确保它能产生一些输出并且不会崩溃。
$ cat integration_test.sh
#!/bin/sh
BUILDARGS="$*"
...
$
收集覆盖率数据
我们编写了另一个包装脚本,用于调用之前的脚本,为工具构建覆盖率并进行后处理:
$ cat wrap_test_for_coverage.sh
#!/bin/sh
...
$
深入覆盖率数据 📊
覆盖率数据文件的处理
完成覆盖率集成测试后,我们可以以各种方式后处理原始数据文件,例如转换为文本格式的覆盖率配置文件或合并原始配置文件。
转换配置文件
使用`go tool cov
data textfmt`命令,我们可以将GOCOVERDIR目录中的文件生成文本格式的配置文件。
$ go tool covdata textfmt -i=covdatafiles -o=cov.txt
...
$
合并原始配置文件
使用go tool covdata merge
命令,我们可以合并来自不同集成测试运行的数据文件。
$ go tool covdata merge -i=covdatafiles -o=merged
...
$
总结
通过本文,我们了解了Go 1.20如何突破以往的限制,支持从大型集成测试中收集覆盖率数据。这对于理解复杂测试的有效性以及它们如何覆盖源代码至关重要。这是我在猫头虎的Go生态洞察专栏中的又一篇力作,详情点击这里。
关键点 | 说明 |
---|---|
Go集成测试 | 构建完整的应用程序二进制文件,测试整个程序的行为 |
Go 1.20新特性 | 使用“go build -cover”构建带覆盖率工具的程序 |
mdtool示例 | 一个简单的markdown处理工具,用于演示集成测试和覆盖率收集 |
覆盖率数据处理 | 转换和合并覆盖率数据文件以提高分析效率 |
下一篇预告
下一篇文章,我将探讨Go开发者调查2023 Q1结果,深入了解Go社区的最新动态和开发者的意见。敬请期待!🌟
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。