TestMain找到了多个定义

时间:2017-06-14 18:44:08

标签: testing go

如果我定义了两个测试,每个测试都有自己的TestMain方法,go test错误:"multiple definitions found of TestMain"

我能理解并且实际上期待这种行为,因为在同一个包中不应该有多个TestMain。但是,我现在不知道该怎么办。每个测试套件都有自己的需求。我需要创建不同的TestMain来设置测试,当然,无需重命名我的包

我可以使用beforeafter等设置方法在其他语言中轻松完成此操作,对于测试类

我可能会去使用testify的套房。很遗憾stdlib不支持这个。

你有什么建议吗?

1 个答案:

答案 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")
        }
    }
}