diff --git a/zh/11.3.md b/zh/11.3.md index 8a506307..7afc8e50 100644 --- a/zh/11.3.md +++ b/zh/11.3.md @@ -3,6 +3,13 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test`命令来实现单元测试和性能测试,`testing`框架和其他语言中的测试框架类似,你可以基于这个框架写针对相应函数的测试用例,也可以基于该框架写相应的压力测试用例,那么接下来让我们一一来看一下怎么写。 +另外建议[gotests](https://github.com/cweill/gotests)插件自动生成测试代码: + +```Go + go get -u -v github.com/cweill/gotests/... + + ``` + ## 如何编写测试用例 由于`go test`命令只能在一个相应的目录下执行所有文件,所以我们接下来新建一个项目目录`gotest`,这样我们所有的代码和测试代码都在这个目录下。 @@ -10,6 +17,8 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` 1. gotest.go:这个文件里面我们是创建了一个包,里面有一个函数实现了除法运算: +```Go + package gotest import ( @@ -24,6 +33,8 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` return a / b, nil } +``` + 2. gotest_test.go:这是我们的单元测试文件,但是记住下面的这些原则: - 文件名必须是`_test.go`结尾的,这样在执行`go test`的时候才会执行到相应的代码 @@ -36,6 +47,8 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` 下面是我们的测试用例的代码: +```Go + package gotest import ( @@ -54,6 +67,8 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` t.Error("就是不通过") } +``` + 我们在项目目录下面执行`go test`,就会显示如下信息: --- FAIL: Test_Division_2 (0.00 seconds) @@ -73,7 +88,9 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` exit status 1 FAIL gotest 0.012s 上面的输出详细的展示了这个测试的过程,我们看到测试函数1`Test_Division_1`测试通过,而测试函数2`Test_Division_2`测试失败了,最后得出结论测试不通过。接下来我们把测试函数2修改成如下代码: - + +```Go + func Test_Division_2(t *testing.T) { if _, e := Division(6, 0); e == nil { //try a unit test on function t.Error("Division did not work as expected.") // 如果不是如预期的那么就报错 @@ -81,6 +98,7 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` t.Log("one test passed.", e) //记录一些你期望记录的信息 } } +``` 然后我们执行`go test -v`,就显示如下信息,测试通过了: === RUN Test_Division_1 @@ -97,14 +115,18 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` - 压力测试用例必须遵循如下格式,其中XXX可以是任意字母数字的组合,但是首字母不能是小写字母 +```Go func BenchmarkXXX(b *testing.B) { ... } - +``` + - `go test`不会默认执行压力测试的函数,如果要执行压力测试需要带上参数`-test.bench`,语法:`-test.bench="test_name_regex"`,例如`go test -test.bench=".*"`表示测试全部的压力测试函数 - 在压力测试用例中,请记得在循环体内使用`testing.B.N`,以使测试可以正常的运行 - 文件名也必须以`_test.go`结尾 下面我们新建一个压力测试文件webbench_test.go,代码如下所示: +```Go + package gotest import ( @@ -129,6 +151,7 @@ Go语言中自带有一个轻量级的测试框架`testing`和自带的`go test` } } +``` 我们执行命令`go test -file webbench_test.go -test.bench=".*"`,可以看到如下结果: