Go 语言的 testing
包为编写单元测试和基准测试提供了强大的支持。单元测试用于验证代码的正确性,基准测试用于测量代码的性能。
单元测试
在 Go 语言中,单元测试的函数名必须以 Test
开头,且函数的唯一参数必须是 *testing.T
类型。我们可以使用 t.Error
或 t.Fail
来标记测试失败。
package main
import "testing"
func TestAdd(t *testing.T) {
got := Add(1, 2)
want := 3
if got != want {
t.Errorf("Add(1, 2) = %d; want 3", got)
}
}
在上述测试中,我们测试了 Add
函数。如果 Add(1, 2)
的结果不是 3,我们会使用 t.Errorf
来报告错误。
运行测试:
go test
基准测试
基准测试的函数名必须以 Benchmark
开头,且函数的唯一参数必须是 *testing.B
类型。基准测试的目的是测量代码在固定的时间内可以运行多少次。
package main
import "testing"
func BenchmarkAdd(b *testing.B) {
for i := 0; i < b.N; i++ {
Add(1, 2)
}
}
在上述基准测试中,我们测量了 Add
函数的性能。测试将运行 b.N
次,并测量总的时间。
运行基准测试:
go test -bench=.
表驱动测试
表驱动测试是一种常用的测试模式,它将测试用例组织成一个表格,然后循环遍历表格中的每一行进行测试。
package main
import "testing"
func TestAdd(t *testing.T) {
var tests = []struct {
a, b, want int
}{
{1, 2, 3},
{4, -5, -1},
{0, 0, 0},
}
for _, tt := range tests {
if got := Add(tt.a, tt.b); got != tt.want {
t.Errorf("Add(%v, %v) = %v; want %v", tt.a, tt.b, got, tt.want)
}
}
}
在上述测试中,我们为 Add
函数创建了多个测试用例,并使用表驱动测试来进行测试。
总的来说,Go 语言的 testing
包为单元测试和基准测试提供了强大的支持。我们应该充分利用这些工具来确保我们的代码是正确的,同时也要关注代码的性能。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。