Add 11.3.md syntax highlighting and Add gotests

This commit is contained in:
vCaesar
2016-12-18 16:41:45 +08:00
parent 7e9109750b
commit ff4a06a13c

View File

@@ -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=".*"`,可以看到如下结果: