Add 11.3.md syntax highlighting and Add gotests
This commit is contained in:
27
zh/11.3.md
27
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=".*"`,可以看到如下结果:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user