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 關注
- 145 瀏覽
添加回答
舉報