golang的测试框架stretchr/testify
- 安装
$ export GOPATH=~/go
$ go get github.com/stretchr/testify
然后在你的GOPATH目录下面就可以看到
$ ls ${GOPATH}/src/github.com/stretchr/testify
assert _codegen doc.go Gopkg.lock Gopkg.toml http LICENSE mock package_test.go README.md require suite vendor
我主要用两个包
- assert package
- require package
他们的唯一差别就是require的函数会直接导致case结束,而assert虽然也标记为case失败,但case不会退出,而是继续往下执行。看一个例子:
例子1:使用assert
package main
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCase1(t *testing.T) {
name := "Bob"
age := 10
assert.Equal(t, "bob", name)
assert.Equal(t, 20, age)
}
执行:
$ go test
--- FAIL: TestCase1 (0.00s)
assertions.go:254:
Error Trace: main_test.go:13
Error: Not equal:
expected: "bob"
actual : "Bob"
Test: TestCase1
assertions.go:254:
Error Trace: main_test.go:14
Error: Not equal:
expected: 20
actual : 10
Test: TestCase1
FAIL
exit status 1
FAIL testUT 0.009s
在这个例子中我们使用的是assert,可以看到两个assert.Equal()指令都被执行了。
例子2:使用require
package main
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestCase1(t *testing.T) {
name := "Bob"
age := 10
require.Equal(t, "bob", name)
require.Equal(t, 20, age)
}
执行:
$ go test
--- FAIL: TestCase1 (0.00s)
assertions.go:254:
Error Trace: main_test.go:12
Error: Not equal:
expected: "bob"
actual : "Bob"
Test: TestCase1
FAIL
exit status 1
FAIL testUT 0.007s
而在这个例子中我们使用的是require,可以看到只有第一个require.Equal()指令被执行了,第二个require.Equal()没有被执行。
常用的stretchr/testify框架函数:
func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool
func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool
func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool
func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool
func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool
func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool
func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool
func Error(t TestingT, err error, msgAndArgs ...interface{}) bool
func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool
func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool
func True(t TestingT, value bool, msgAndArgs ...interface{}) bool
func False(t TestingT, value bool, msgAndArgs ...interface{}) bool
func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool
func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool
func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool
func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool)
func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool)
func FileExists(t TestingT, path string, msgAndArgs ...interface{}) bool
func DirExists(t TestingT, path string, msgAndArgs ...interface{}) bool