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 和 require

我主要用两个包: assert 和 require

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()没有被执行。


作者:CodingCode
链接:https://www.jianshu.com/p/ad46bbbf877c