我试图从golang测试重复示例
package main
import (
"testing"
)
func TestSomeTest(t *testing.T) {}
func TestMain(m *testing.M) { // cleaning after each test}
Run Code Online (Sandbox Code Playgroud)
我想TestMain在每次测试后运行函数.
运行命令 go test
而编译器说
./testingM_test.go:9: undefined: testing.M
Run Code Online (Sandbox Code Playgroud)
那么在执行每个测试后如何清理?
检查go version输出:这仅适用于1.4+.
测试包有一个新工具,可以更好地控制运行一组测试.如果测试代码包含一个函数
func TestMain(m *testing.M)
Run Code Online (Sandbox Code Playgroud)
将调用该函数而不是直接运行测试.
该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)
}
Run Code Online (Sandbox Code Playgroud)
虽然每个测试仍然必须自行清理,但这只涉及恢复初始数据,这比进行模式迁移要快.