logo
1
0
Login

Go 单元测试覆盖率示例

该仓库以 Go + 标准测试框架为例介绍如何配置单测覆盖率上报。

项目结构

/workspace/ ├── calculator.go # 计算器函数(加法和减法) ├── calculator_test.go # 单元测试 ├── go.mod # Go模块文件 ├── Makefile # 构建和测试工具 ├── Dockerfile # Docker容器配置 ├── docker-compose.yml # Docker Compose配置 └── README.md # 项目说明

如何使用

  1. Fork 该仓库,在 main 分支启动云原生开发。
  2. 执行 make test 可以看到单测覆盖率结果。
  3. 可在 calculator_test.go 中的单测代码注释一些测试用例,再次执行 make test 可以看到单测覆盖率下降。
  4. 提交代码并 push 到 main 分支,会触发 CI,CI 会自动将单测覆盖率上报徽章。
  5. 可在仓库的 洞察/单元测试覆盖率 中查看单测覆盖率结果,https://<your-repo-path>/-/insights/ut
  6. 新建分支,比如 devcalculator.gocalculator_test.go 中添加一些代码和单测代码,再次执行 make test 查看单测覆盖率。
  7. 提交代码并 push 到 dev 分支,创建 devmain 的 PR,会触发 CI,可以在构建日志页看到增量覆盖率。

该示例中 push 事件配置了全量单测覆盖率红线,pull_request 事件配置了增量单测覆盖率红线。可以根据需要修改,构造代码调整覆盖率查看效果。

功能说明

计算器函数

  • Sum(a, b int) int - 返回两个整数的和
  • Sub(a, b int) int - 返回两个整数的差

单元测试

测试用例覆盖了多种场景:

  • 正数运算
  • 负数运算
  • 正负混合运算
  • 零值运算
  • 边界情况

使用方法

本地运行(需要安装Go环境)

运行测试

# 运行所有测试 make test # 或者直接使用go test go test -v ./...

生成覆盖率报告

# 生成文本格式的覆盖率报告 make coverage # 生成HTML格式的覆盖率报告 make html-coverage

清理生成的文件

make clean

使用Docker运行(无需本地Go环境)

构建Docker镜像

# 构建镜像 docker build -t go-test-coverage .

运行测试

# 使用Docker运行测试 docker run --rm go-test-coverage make test

生成覆盖率报告

# 生成文本覆盖率报告 docker run --rm -v $(pwd):/app -w /app go-test-coverage make coverage # 生成HTML覆盖率报告 docker run --rm -v $(pwd):/app -w /app go-test-coverage make html-coverage

覆盖率报告说明

  • 文本报告: 显示每个函数的覆盖率百分比
  • HTML报告: 可视化显示代码覆盖情况,绿色表示已覆盖,红色表示未覆盖

示例输出

运行 make coverage 会显示类似以下内容:

PASS coverage: 100.0% of statements ok calculator 0.001s

这表明所有代码语句都被测试覆盖到了。

About

No description, topics, or website provided.
Language
Go70.5%
Makefile24.2%
Dockerfile5.3%