每次测试后的golang测试方法:未定义:testing.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

那么每次测试执行后如何清理呢?


ibeautiful
浏览 357回答 1
1回答

繁华开满天机

检查您的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)}虽然每个测试仍然必须在其自身之后进行清理,但这仅涉及恢复初始数据,这比执行架构迁移要快得多。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go