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

在Go语言项目中,单元测试是保障代码质量的重要手段。Go内置了testing包,无需引入第三方框架即可轻松编写测试。下面通过一个简单的入门项目示例,展示如何编写单元测试。
假设我们有一个简单的计算器模块,项目结构如下:
calculator/实现加法和乘法两个函数:
package calculatorfunc Add(a, b int) int {
return a + b
}
func Multiply(a, b int) int {
return a * b
}
测试文件名以_test.go结尾,放在同一目录下:
立即学习“go语言免费学习笔记(深入)”;
package calculatorimport "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) { 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 ./...执行后会在浏览器中打开HTML页面,绿色表示已覆盖,红色表示未覆盖。
基本上就这些。Go的测试机制简洁高效,配合表驱动测试和覆盖率工具,能有效提升代码可靠性。不复杂但容易忽略。
以上就是Golang入门项目中单元测试编写示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号