乐闻世界logo
搜索文章和话题

Go 如何执行单元测试?

1 个月前提问
1 个月前修改
浏览次数13

1个答案

1

在Go语言中执行单元测试,我们通常会使用Go的标准库testing。以下是执行单元测试的具体步骤和一些实践技巧:

1. 创建测试文件

在Go中,测试代码通常位于以_test.go结尾的文件中。这些文件与需要测试的源代码文件处于相同的包中。例如,如果你有一个名为calculator.go的文件,你应该创建一个名为calculator_test.go的测试文件。

2. 编写测试函数

在测试文件中,每一个测试函数都需要以Test开头,并接受一个*testing.T类型的参数。例如:

go
package calculator import "testing" func TestAdd(t *testing.T) { result := Add(1, 2) expected := 3 if result != expected { t.Errorf("Add(1, 2) = %d; expected %d", result, expected) } }

3. 使用t.Run()进行子测试

为了更细致地组织测试案例和共享设置代码,可以使用t.Run()来定义子测试:

go
func TestAdd(t *testing.T) { t.Run("1+2", func(t *testing.T) { if Add(1, 2) != 3 { t.Fail() } }) t.Run("1+0", func(t *testing.T) { if Add(1, 0) != 1 { t.Fail() } }) }

4. 运行测试

你可以使用Go的命令行工具来运行测试。使用以下命令:

bash
go test

这个命令会自动查找所有的*_test.go文件,并执行里面的测试函数。

5. 使用表格驱动测试

表格驱动测试是一种在Go中组织测试的常用方法,可以使测试更清晰和易于扩展:

go
func TestAdd(t *testing.T) { var tests = []struct { a, b, expected int }{ {1, 2, 3}, {1, 0, 1}, {-1, -1, -2}, } 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.expected { t.Errorf("got %d, want %d", ans, tt.expected) } }) } }

6. 检查代码覆盖率

要检查测试的代码覆盖率,可以使用go test -cover命令,它会告诉你测试覆盖了多少百分比的代码。这是提高代码质量的一个重要方面。

bash
go test -cover

总结

使用Go的testing包可以方便地执行单元测试。通过结合使用测试函数、子测试、表格驱动的测试方法和代码覆盖率工具,可以构建出一个健壮且易于维护的测试环境。

2024年8月7日 21:48 回复

你的答案