我正在使用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)
}
}
}
答案 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)
}
}