go get GitHub.com/stretchr/testify

一个简单的示例
让我们先看看传统上如何在 Go 中编写测试。这将让我们对提高可读性的 testify 有所了解。
我先来写一个简单的 Go 程序,它有一个输出函数, Calculate() 。

package main
 
import (
    "fmt"
)
 
// 计算并返回 x + 2.
func Calculate(x int) (result int) {
    result = x + 2
    return result
}
 
func main() {
    fmt.Println("Hello World")
}

然后下面是使用 testify 进行断言:

package main
 
import (
    "github.com/stretchr/testify/assert"
    "testing"
)
 
func TestCalculate(t *testing.T) {
    assert.Equal(t, Calculate(2), 4)
}

如你所见,我们使用 assert.Equal 函数简单地测试了相等性
assert还有很多的断言方法,比如:
assert.Contains (包含)
assert.NotEqual (不等于)等等

用testify进行表驱动测试

将 testify 并入到我们测试套件中并不会妨碍我们使用诸如表驱动测试之类的方法,事实上,它能使测试变得更简单。

package main
 
import (
    "testing"
 
    "github.com/stretchr/testify/assert"
)
 
func TestCalculate(t *testing.T) {
    assert := assert.New(t)
 
    var tests = []struct {
        input    int
        expected int
    }{
        {2, 4},
        {-1, 1},
        {0, 2},
        {-5, -3},
        {99999, 100001},
    }
 
    for _, test := range tests {
        assert.Equal(Calculate(test.input), test.expected)
    }
}

请注意我们在此示例中调用的 assert.Equal() 与上面例子中的细微差别。我们用 assert using assert.New(t) 初始化了断言,然后我们可以多次调用 assert.Equal() ,只需传入输入值和期望值,而不是每次都将 t 作为第一个参数传入。当然这不是什么大问题,但它确实使我们的测试看起来更简洁明了。