我不确定我是否正确地命名了问题,如果不是,我是否愿意进行修改。
我有这样的测试:
func TestMyStruct(t *testing.T) {
tests := []struct {
testcase string
setup func()
}{
testcase: "test1",
setup: func() {
// if setup fail, call t.Fatal()
t.Fatal()
},
}
for _, test := range tests {
t.Run(test.testcase, func(t *testing.T) {
// setup:
test.setup()
// action:
// assertions:
})
}
}
我可以用另一种方式编写,将t传递给内部设置函数:
func TestMyStruct(t *testing.T) {
tests := []struct {
testcase string
setup func(t *testing.T)
}{
testcase: "test1",
setup: func(t *testing.T) {
// if setup fail, call t.Fatal()
t.Fatal()
},
}
for _, test := range tests {
t.Run(test.testcase, func(t *testing.T) {
// setup:
test.setup(t)
// action:
// assertions:
})
}
}
我的问题是首选哪种方法,为什么?
答案 0 :(得分:1)
在设置函数中的第一个示例t
中,是指传递给TestMyStruct
的主要测试。
在第二个示例中,setup函数中的t
引用了它自己的t
参数,该参数作为子测试从t.Run
传递。
这是不同的,它取决于您要失败的测试是主测试还是子测试。
[扩展@Peter的评论并标记为社区Wiki]