我正在尝试重复 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)
}
虽然每个测试仍然必须在自身之后进行清理,但这只涉及还原初始数据,这比执行架构迁移要快得多。