ibeautiful
2021-09-20 15:03:15
我正在嘗試重復golang 測試中的示例package mainimport ( "testing")func TestSomeTest(t *testing.T) {}func TestMain(m *testing.M) { // cleaning after each test}我希望TestMain函數(shù)在每次測試后運行。運行命令 go test編譯器說./testingM_test.go:9: undefined: testing.M那么每次測試執(zhí)行后如何清理呢?
1 回答

繁華開滿天機
TA貢獻1816條經(jīng)驗 獲得超4個贊
檢查您的go version輸出:這僅適用于go 1.4+。
測試包有一個新工具,可以提供對運行一組測試的更多控制。如果測試代碼包含一個函數(shù)
func TestMain(m *testing.M)
該函數(shù)將被調(diào)用,而不是直接運行測試。
該M結(jié)構(gòu)包含訪問和運行測試的方法。
您可以在此處看到該功能:
的引入TestMain()使得這些遷移僅運行一次成為可能。代碼現(xiàn)在看起來像這樣:
func TestSomeFeature(t *testing.T) {
defer models.TestDBManager.Reset()
// Do the tests
}
func TestMain(m *testing.M) {
models.TestDBManager.Enter()
// os.Exit() does not respect defer statements
ret := m.Run()
models.TestDBManager.Exit()
os.Exit(ret)
}
雖然每個測試仍然必須在其自身之后進行清理,但這僅涉及恢復初始數(shù)據(jù),這比執(zhí)行架構(gòu)遷移要快得多。
- 1 回答
- 0 關(guān)注
- 385 瀏覽
添加回答
舉報
0/150
提交
取消