为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
ibeautiful 2021-09-20 15:03:15
我正在尝试重复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)

}

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


查看完整回答
反对 回复 2021-09-20
  • 1 回答
  • 0 关注
  • 356 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信