我正在尝试重复golang 测试中的示例package mainimport ( "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那么每次测试执行后如何清理呢?
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
检查您的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)
}
虽然每个测试仍然必须在其自身之后进行清理,但这仅涉及恢复初始数据,这比执行架构迁移要快得多。
- 1 回答
- 0 关注
- 356 浏览
添加回答
举报
0/150
提交
取消