Go语言学习11-测试
单元测试
go
// functions.go
package testing
func square(op int) int {
return op * op
}
go
// functions_test.go
package testing
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func TestSquare(t *testing.T) {
inputs := [...]int{1, 2, 3}
expected := [...]int{1, 4, 9}
for i := 0; i < len(inputs); i++ {
ret := square(inputs[i])
assert.Equal(t, expected[i], ret)
//if ret != expected[i] {
// t.Errorf("input is %d, the expcted is %d, the actual %d",
// inputs[i], expected[i], ret)
//}
}
}
func TestErrorInCode(t *testing.T) {
fmt.Println("Start")
t.Error("Error")
fmt.Println("End")
}
func TestFailInCode(t *testing.T) {
fmt.Println("Start")
t.Fatal("Error")
fmt.Println("End")
}
内置单元测试框架
-
Fail, Error: 该测试失败, 该测试继续, 其他测试继续执行
-
FailNow, Fatal: 该测试失败, 该测试中止, 其他测试继续执行
-
代码覆盖率
bashgo test -v -cover
Benchmark
go
func BenchmarkConcatStringByAdd(b *testing.B) {
// 与性能测试无关的代码
b.ResetTimer()
for i := 0; i < b.N; i++ {
// 测试代码
}
b.StopTimer()
// 与性能测试无关的代码
}
benchmark命令
bash
go test -bench=. -benchmem
-bench=<相关benchmark测试>
Windows下使用go test
命令行时, -bench=.
应写为 -bench="."
Behavior Driven Development

"I believe that the hardest part of software projects, the most common source of project failure, is communication with the customers and users of that software. By providing a clear yet precise language to deal with domains, a DSL can help improve this communication." -- Martin Fowler.

BDD in Go
项目网站
https://github.com/smartystreets/goconvey
安装
bash
go get -u github.com/smartystreets/goconvey/convey
启动 web ui
bash
$GOPATH/bin/goconvey
示例
go
func TestSpec(t *testing.T) {
// Only pass t into top-level Convey calls
Convey("Given 2 even numbers", t, func() {
a := 2
b := 4
Convey("When add the two numbers", func() {
c := a + b
Convey("Then the result is still even", func() {
So(c%2, ShouldEqual, 0)
})
})
})
}