Go语言单元测试通过testing包实现,测试文件以_test.go结尾,函数名以Test开头,使用go test运行,支持表驱动测试、覆盖率分析和性能基准测试。

Go语言的单元测试通过testing包原生支持,写法简洁,无需引入外部框架。测试文件以_test.go结尾,与被测代码放在同一包中。测试函数名以Test开头,参数为*testing.T。下面介绍基本结构和常见用法。
基础测试函数写法
假设有一个简单函数需要测试:
// math.go
package main
func Add(a, b int) int {
return a + b
}
对应的测试文件如下:
// math_test.go
package main
import “testing”
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf(“期望 5,实际 %d”, result)
}
}
运行测试命令:
go test 或 go test -v 查看详细输出。
立即学习“go语言免费学习笔记(深入)”;
表驱动测试(Table-Driven Tests)
Go推荐使用表驱动方式对多个输入进行集中测试,减少重复代码。
func TestAdd_TableDriven(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{0, 0, 0},
{-1, 1, 0},
{100, -50, 50},
}
for _, tt := range tests {
t.Run(fmt.Sprintf(“%d+%d”, tt.a, tt.b), func(t *testing.T) {
result := Add(tt.a, tt.b)
if result != tt.expected {
t.Errorf(“期望 %d,实际 %d”, tt.expected, result)
}
})
}
}
t.Run 可为每个子测试命名,便于定位失败用例。
测试覆盖率与性能测试
查看测试覆盖率:
千帆AppBuilder
百度推出的一站式的AI原生应用开发资源和工具平台,致力于实现人人都能开发自己的AI原生应用。
174 查看详情
go test -cover 显示整体覆盖率go test -coverprofile=cover.out 生成详细报告go tool cover -html=cover.out 浏览可视化结果
性能测试使用Benchmark前缀:
func BenchmarkAdd(b *testing.B) {
for i := 0; i Add(1, 2)
}
}
运行:go test -bench=.,系统自动调整b.N执行足够次数。
模拟与接口测试建议
Go不提供内置mock工具,但可通过接口+依赖注入实现解耦。
例如定义数据访问接口,测试时传入模拟实现:
type Repository interface {
Fetch(id int) (string, error)
}
func GetData(repo Repository, id int) string {
data, _ := repo.Fetch(id)
return data
}
测试时构造一个假的repo即可验证逻辑,无需真实数据库。
基本上就这些。Go的测试机制轻量但强大,配合清晰的代码结构能有效保障质量。
以上就是Golang单元测试基础与示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1127143.html
微信扫一扫
支付宝扫一扫