如果我定义了两个测试,每个测试都有自己的TestMain
方法,go test
错误:"multiple definitions found of TestMain"
。
我能理解并且实际上期待这种行为,因为在同一个包中不应该有多个TestMain。但是,我现在不知道该怎么办。每个测试套件都有自己的需求。我需要创建不同的TestMain
来设置测试,当然,无需重命名我的包。
我可以使用before
,after
等设置方法在其他语言中轻松完成此操作,对于测试类是。
我可能会去使用testify的套房。很遗憾stdlib不支持这个。
你有什么建议吗?
答案 0 :(得分:1)
您可以使用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")
}
}
}