找到TestMain多个定义

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 TestMains 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")
        }
    }
}