如果我定义了两个测试,每个测试都有自己的TestMain
方法,go test
错误:"multiple definitions found of TestMain"
。
我可以理解并实际上期待这种行为,因为在同一程序包中不应有多个TestMain。但是,我不知道该怎么办。每个测试套件都有其自己的需求。当然,我需要创建不同的TestMain
来设置测试,而不重命名我的包。
我可以使用before
,after
等设置方法轻松地用其他语言来做到这一点,这是测试类独有的。
我可能会去使用testify的套件。遗憾的是,stdlib不支持此功能。
你有什么建议吗?
最佳答案
您可以使用M.Run。
func TestMain(m *testing.M) {
setup()
code := m.Run()
close()
os.Exit(code)
}
有关更多信息,请参见subtest。
更详细的例子:
package main
import (
"testing"
)
func setup() {}
func teardown() {}
func setup2() {}
func teardown2() {}
func TestMain(m *testing.M) {
var wrappers = []struct {
Setup func()
Teardown func()
}{
{
Setup: setup,
Teardown: teardown,
},
{
Setup: setup2,
Teardown: teardown2,
},
}
for _, w := range wrappers {
w.Setup()
code := m.Run()
w.Teardown()
if code != 0 {
panic("code insn't null")
}
}
}
关于testing - 找到TestMain多个定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44552393/