Go单元测试与性能测试

在Go语言中做单元测试和性能测试是一件非常容易的事情——Go自带了测试工具包,testing包。

通常,测试代码和功能代码在同一个包中,测试代码以“_test”结尾。测试有两种类型,一种是单元测试(UnitTest),一种是性能测试(Benchmark)。接下来将会介绍一下如何写这两种测试。

单元测试

首先创建一个测试文件,命名foo_test.go(提示: 以test结尾

接下来是创建测试函数,Test_Foo(提示:测试函数以Test开头,传入*testing.T指针),代码如下:

func Test_Foo(t *testing.T) {

}

这里什么也没做,只是创建了一个空的测试函数,但确实是能运行的测试函数!如果你的编辑器支持测试提示(提示:vscode支持),那么你可以在函数上面看到一行小字,如下:

直接点击就可以运行测试。如果没有这种提示,那么可以执行命令:go test foo_test.go 来运行这个测试,测试的结果将会是:

ok      command-line-arguments  0.007s

做一个完整的测试和其他的语言或者和我们想象中的并没有什么差异。基本流程都是:传入我们假设的参数,执行待测试的函数,断言待测试的函数的输出是否和我们预期的相符合。

一个简单的单元测试的例子,测试max函数是否能返回正确的值。

func max(a int, b int) int {
	if a >= b {
		return a
	}
	return b
}

func Test_Foo(t *testing.T) {
	a := 1
	b := 2
	c := max(a, b)
	if c != 2 {
		t.Errorf("max()=%d, expected %d", c, 2)
	}
}

把 max函数 中的 if a>=b 改成 a<=b,测试将不会通过。

性能测试

性能测试用于测试某个函数或者某段代码的性能,测试代码以Benchmark开头,传入*testing.B指针。

针对上面的max函数创建一个性能测试,代码如下:

func Benchmark_Max(b *testing.B) {
	for i := 0; i < b.N; i++ {
		max(1, 2)
	}
}

如果你的编辑器支持,那么你将会在Benchmark上面看到一行小字

如果不支持,那么可以用命令行运行:go test foo_test.go –bench=.

赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注