在多个实例上添加前缀testmain

时间:2019-05-20 11:02:25

标签: go testing

我正在使用TestMain测试同一接口的多个实现

func TestMain(m *testing.M) {
    setup1()
    code = m.Run()
    if code != 0 {
        os.exit(code)
    }

    setup2()
    code = m.Run()
    if code != 0 {
        os.exit(code)
    }
}

如果我随后在测试中遇到错误,则很难知道哪个实施方式导致了失败

在T子测试中,您的运行方式如下:

t.run("test name", testfunc)

有什么办法做一些主要测试的前缀

m.Run("name") // intuitively what I should be able to do

编辑:添加一些背景,因为看起来人们没有看到它的底蕴

// MyInterface is implemented multiple time, but we expect the same behavior for any implementation
type IMyInterface interface {
    SomeMethod()
    SomeOtherMethod()
}

var (
    implUnderTest IMyInterface // is referred to in every tests
)

// There are many test files with many tests run for each implementation
func TestMain(m *testing.M) {
    for _, impl := range []IMyInterface {&Impl1{}, &Impl2{}, &Impl3{}} {
        implUnderTest = impl
        code := m.Run()
        if code != 0 {
            os.exit(code)
        }
    }

}

2 个答案:

答案 0 :(得分:0)

多次调用m.Run()似乎是一种反模式。创建具有不同设置的多个测试,并相应地命名。 AFAIK没有m.Run("name")

答案 1 :(得分:0)

我仍在寻找更好的解决方案,直到那时我在做类似以下的事情

func TestMain(m *testing.M) {
    setup1()
    code = m.Run()
    if code != 0 {
        log.Println("failed on implementation 1")
        os.exit(code)
    }

    setup2()
    code = m.Run()
    if code != 0 {
        log.Println("failed on implementation 2")
        os.exit(code)
    }
}