If I define, two tests, each with its own TestMain
method, go test
errors: "multiple definitions found of TestMain"
.
I can understand and was expecting this behaviour actually, because, there should not be more than one TestMain in the same package. However, I don't know what to do now. Each test suite has its own needs. I need to create distinct TestMain
s to setup the tests, of course, without renaming my packages.
I could do that easily in other languages with setup methods like before
, after
, which is unique to a test class.
I'll probably go and use testify's suites. Sad that this is not supported in stdlib.
Do you have any suggestions?
You can use M.Run.
func TestMain(m *testing.M) {
setup()
code := m.Run()
close()
os.Exit(code)
}
See subtest for additional info.
More detailed example:
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")
}
}
}