🌷🍁 博主猫头虎(🐅🐾)带您 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生态,共同成长。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐