In [ ]:
## 测试

创建以 `_test.go` 结尾的测试文件在其中编写以 `Test` 开头的测试函数 `t *testing.T` 为参数该参数提供了 `.Errorf`  `.Fatal` 函数可以输出测试失败的提示

* `t.Errorf`:输出错误信息但是会继续测试
* `t.Fatal`:输出错误信息并停止测试
In [ ]:
```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 .` 即可
In [ ]:
### 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)
    }
}

```
In [ ]:
然后运行

```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
```