Go语言通过内置testing包实现单元测试,示例中为calculator模块的Add和Multiply函数编写测试,测试文件以_test.go结尾,使用Test函数和t.Errorf验证结果,推荐用表驱动测试(t.Run)管理多用例,通过go test运行测试,go test -coverprofile结合go tool cover可查看覆盖率,绿色为已覆盖,红色为未覆盖,提升代码可靠性。

在Go语言项目中,单元测试是保障代码质量的重要手段。Go内置了testing包,无需引入第三方框架即可轻松编写测试。下面通过一个简单的入门项目示例,展示如何编写单元测试。
项目结构示例
假设我们有一个简单的计算器模块,项目结构如下:
calculator/
├── calc.go
└── calc_test.go
被测代码:calc.go
实现加法和乘法两个函数:
package calculator
func Add(a, b int) int {
return a + b
}
func Multiply(a, b int) int {
return a * b
}
编写测试:calc_test.go
测试文件名以_test.go结尾,放在同一目录下:
立即学习“go语言免费学习笔记(深入)”;
package calculator
import “testing”
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf(“Add(2, 3) = %d; want 5”, result)
}
}
func TestMultiply(t *testing.T) {
result := Multiply(4, 5)
if result != 20 {
t.Errorf(“Multiply(4, 5) = %d; want 20”, result)
}
}
运行测试
在项目根目录执行命令:
go test ./…
如果所有测试通过,输出会显示:
ok calculator 0.001s
若测试失败,会提示具体错误信息,包括哪一行断言失败。
使用表驱动测试简化多个用例
当需要测试多个输入时,推荐使用表驱动测试方式:
func TestAdd_TableDriven(t *testing.T) {
tests := []struct {
a, b, expected int
}{
{1, 2, 3},
{0, 0, 0},
{-1, 1, 0},
}
for _, tt := range tests {
t.Run(fmt.Sprintf(“Add(%d,%d)”, tt.a, tt.b), func(t *testing.T) {
if got := Add(tt.a, tt.b); got != tt.expected {
t.Errorf(“got %d, want %d”, got, tt.expected)
}
})
}
}
t.Run 可以让每个子测试独立运行并显示清晰的名称,便于定位问题。
测试覆盖率
Go还支持查看测试覆盖率:
go test -coverprofile=cover.out ./…
go tool cover -html=cover.out
执行后会在浏览器中打开HTML页面,绿色表示已覆盖,红色表示未覆盖。
基本上就这些。Go的测试机制简洁高效,配合表驱动测试和覆盖率工具,能有效提升代码可靠性。不复杂但容易忽略。
以上就是Golang入门项目中单元测试编写示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1404800.html
微信扫一扫
支付宝扫一扫