golang的测试框架stretchr/testify

CodeGeek · · 4718 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

我主要用两个包

  1. assert package
  2. 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

官方链接:
https://github.com/stretchr/testify


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:CodeGeek

查看原文:golang的测试框架stretchr/testify

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4718 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传