推荐答案
在 Go 语言中,编写测试用例通常使用 testing 包。以下是一个简单的示例,展示如何编写测试用例:
// www.javascriptcn.com code example
package main
import (
"testing"
)
// 被测试的函数
func Add(a, b int) int {
return a + b
}
// 测试用例
func TestAdd(t *testing.T) {
result := Add(2, 3)
expected := 5
if result != expected {
t.Errorf("Add(2, 3) = %d; want %d", result, expected)
}
}要运行测试,可以使用以下命令:
go test
本题详细解读
1. testing 包
Go 语言内置了 testing 包,用于编写和运行测试用例。测试用例通常放在与被测试代码相同的包中,并以 _test.go 结尾的文件中。
2. 测试函数
测试函数的命名必须以 Test 开头,并且接受一个 *testing.T 类型的参数。testing.T 提供了多种方法来报告测试失败、记录日志等。
func TestAdd(t *testing.T) {
// 测试逻辑
}3. 断言
在测试函数中,通常会使用条件语句来检查被测试函数的输出是否符合预期。如果不符合预期,可以使用 t.Errorf 或 t.Fatalf 来报告错误。
if result != expected {
t.Errorf("Add(2, 3) = %d; want %d", result, expected)
}4. 运行测试
使用 go test 命令可以运行当前包中的所有测试用例。Go 会自动查找所有以 _test.go 结尾的文件,并执行其中的测试函数。
go test
5. 测试覆盖率
Go 还提供了测试覆盖率工具,可以通过以下命令查看测试覆盖率:
go test -cover
6. 表格驱动测试
对于需要测试多个输入输出的情况,可以使用表格驱动测试的方式:
// www.javascriptcn.com code example
func TestAddTableDriven(t *testing.T) {
var tests = []struct {
a, b int
want int
}{
{1, 2, 3},
{0, 0, 0},
{-1, 1, 0},
}
for _, tt := range tests {
testname := fmt.Sprintf("%d+%d", tt.a, tt.b)
t.Run(testname, func(t *testing.T) {
ans := Add(tt.a, tt.b)
if ans != tt.want {
t.Errorf("got %d, want %d", ans, tt.want)
}
})
}
}这种方式可以更清晰地组织多个测试用例,并且易于扩展。