2 回答
TA贡献1790条经验 获得超9个赞
如何执行此操作:
func TestParallelSubtest(t *testing.T) {
// setup test variables
fname := setup(t)
t.Run("group", func(t *testing.T) {
for i := 0; i < ncase; i++ {
t.Run(fmt.Sprintf("test_%d", i), func(t *testing.T) {
t.Parallel()
if _, err := os.Stat(fname); os.IsNotExist(err) {
t.Fatalf("file was removed before subtest finished")
}
})
}
})
os.Remove(fname)
}
博客文章的相关部分位于Control of Parallelism:
每个测试都与一个测试函数相关联。如果一个测试的测试函数在其testing.T. 并行测试永远不会与顺序测试同时运行,并且它的执行会暂停,直到它的调用测试函数(父测试的调用函数)返回为止。[...]
一个测试会阻塞,直到它的测试函数返回并且它的所有子测试都已经完成。这意味着由顺序测试运行的并行测试将在运行任何其他连续顺序测试之前完成。
您的问题的具体解决方案可以在参考资料部分找到Cleaning up after a group of parallel tests。
TA贡献1866条经验 获得超5个赞
从 Go 1.14 开始,testing.T
有了允许注册拆卸回调的方法testing.B
。Cleanup
t.Cleanup(func() { os.Remove(fname) })
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报