go1.19.3 Go 测试 stretchr/testify
2022年12月28日1. 首先安装 stretchr/testify ,这是一个知名的第三方测试包,我们将用到他的断言(Assertion)功能。
1 |
go get github.com/stretchr/testify |
2. 测试首页
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package tests import ( "net/http" "testing" "github.com/stretchr/testify/assert" ) func TestHomePage(t *testing.T) { baseURL := "http://localhost:3000" // 1. 请求 —— 模拟用户访问浏览器 var ( resp *http.Response err error ) resp, err = http.Get(baseURL + "/") // 2. 检测 —— 是否无错误且 200 assert.NoError(t, err, "有错误发生,err 不为空") assert.Equal(t, 200, resp.StatusCode, "应返回状态码 200") } |
3. github.com/stretchr/testify/assert 更多用法
判断测试结果是否符合预期结果的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// 相等 func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool // 是否为 nil 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 // 是否为 0 值 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 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 |
打印日志的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// 获取测试名称 method (*T) Name() string // 打印日志 method (*T) Log(args ...interface{}) // 打印日志,支持 Printf 格式化打印 method (*T) Logf(format string, args ...interface{}) // 反馈测试失败,但不退出测试,继续执行 method (*T) Fail() // 反馈测试失败,立刻退出测试 method (*T) FailNow() // 反馈测试失败,打印错误 method (*T) Error(args ...interface{}) // 反馈测试失败,打印错误,支持 Printf 的格式化规则 method (*T) Errorf(format string, args ...interface{}) // 检测是否已经发生过错误 method (*T) Failed() bool // 相当于 Error + FailNow,表示这是非常严重的错误,打印信息结束需立刻退出。 method (*T) Fatal(args ...interface{}) // 相当于 Errorf + FailNow,与 Fatal 类似,区别在于支持 Printf 格式化打印信息; method (*T) Fatalf(format string, args ...interface{}) // 跳出测试,从调用 SkipNow 退出,如果之前有错误依然提示测试报错 method (*T) SkipNow() // 相当于 Log 和 SkipNow 的组合 method (*T) Skip(args ...interface{}) // 与Skip,相当于 Logf 和 SkipNow 的组合,区别在于支持 Printf 格式化打印 method (*T) Skipf(format string, args ...interface{}) // 用于标记调用函数为 helper 函数,打印文件信息或日志,不会追溯该函数。 method (*T) Helper() // 标记测试函数可并行执行,这个并行执行仅仅指的是与其他测试函数并行,相同测试不会并行。 method (*T) Parallel() // 可用于执行子测试 method (*T) Run(name string, f func(t *T)) bool |
为了避免缓存在main.go目录下执行 -count=1 代表执行次数 设置为1 执行一次 ,2为两次 这样可以避免缓存
1 |
go test <span class="token punctuation">.</span><span class="token operator">/</span>tests <span class="token operator">-</span>v <span class="token operator">-</span>count<span class="token operator">=</span><span class="token number">1</span> |