## 测试
创建以 `_test.go` 结尾的测试文件,在其中编写以 `Test` 开头的测试函数,以 `t *testing.T` 为参数,该参数提供了 `.Errorf` 和 `.Fatal` 函数,可以输出测试失败的提示。
* `t.Errorf`:输出错误信息,但是会继续测试
* `t.Fatal`:输出错误信息,并停止测试
```go
// stringutil_test.go
package stringutil
import "testing"
// 测试函数以 Test 开头
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in) // 调用原函数,获取输出结果
if got != c.want {
// 测试未通过,输出错误信息
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
```
运行 `go test .` 即可
### Benckmark
利用 testing 模块,还可以很简单的写 benchmark:
```go
func Fib(n int) int {
if n < 2 {
return n
}
return Fib(n-1) + Fib(n-2)
}
// 文件名也必须以 _test.go 结尾
// 函数名以 Benchmark 开头
// 参数使用 *testing.B
func BenchmarkFib10(b *testing.B) {
// run the Fib function b.N times
for n := 0; n < b.N; n++ {
Fib(10)
}
}
```
然后运行:
```sh
go test -bench=. go_test.go
➜ golang git:(master) ✗ go test -bench=. go_test.go
goos: darwin
goarch: amd64
BenchmarkFib10-4 3000000 453 ns/op
PASS
ok command-line-arguments 1.839s
```