每次测试后的 golang 测试方法:未定义:测试.M.



我正在尝试重复 golang 测试中的示例

package main
import (
    "testing"
)
func TestSomeTest(t *testing.T) {}
func TestMain(m *testing.M) { // cleaning after each test}

我希望TestMain函数在每次测试后运行。

运行命令go test

编译器说

./testingM_test.go:9: undefined: testing.M

那么每次测试后如何清洁呢?

检查你的输出go version:这仅适用于 Go 1.4+。

测试包具有一个新功能,可以更好地控制运行一组测试。如果测试代码包含函数

func TestMain(m *testing.M) 

将调用该函数,而不是直接运行测试。
M 结构包含用于访问和运行测试的方法。


您可以在此处看到该功能的使用:

引入TestMain()使得这些迁移只需运行一次成为可能。代码现在如下所示:

func TestSomeFeature(t *testing.T) {
    defer models.TestDBManager.Reset()
    // Do the tests
}
func TestMain(m *testing.M) {
    models.TestDBManager.Enter()
    // os.Exit() does not respect defer statements
    ret := m.Run()
    models.TestDBManager.Exit()
    os.Exit(ret)
}

虽然每个测试仍然必须在自身之后进行清理,但这只涉及还原初始数据,这比执行架构迁移要快得多。

最新更新