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

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

我可以使用beforeafter等设置方法轻松地用其他语言来做到这一点,这是测试类独有的

我可能会去使用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/

10-11 08:03