1. 程式人生 > 實用技巧 >go test小記

go test小記

golang使用test來進行單元測試,命令如下

go test [packages]

上面命令中packages可以省略,如果省略則是directory mode模式,不省略則是package list mode模式。

directory mode模式是運行當前目錄下 _test.go 字尾的測試檔案。

package list mode模式是執行指定目錄下_test.go 字尾的測試檔案。

兩者區別是directory mode模式會禁用cache,顯示測試檔案中的輸出,測試結束後會列印狀態,package名字以及耗時。

package list mode模式會啟用cache,僅僅顯示測試結果。如要禁用cache快取,則可以使用一些flag選項來阻止,比如-count=1。如果要顯示一些測試函式中的輸出,則需要提供一個-v選項。

go test會執行_test.go 字尾測試檔案中以 TestXxx開頭的函式,Xxx 可以是任何以字母開頭的字母數字字串,但是第一個字母不能是小寫字母,如果是小寫的,則不會執行。而 Xxx 到底如何命名是無關緊要的,比如要測試 twoSum( )函式,則可以叫 TestFuncOf2Sum(),這裡FuncOf2Sum不需要對應twoSum這個名字,FuncOf2Sum只是用於標識test goroutine的。

go test 如何執行指定測試函式呢?網上很多部落格說使用下面的方法就能執行指定測試函式:

go test -v -test.run TestXxx
//或者
go test -v -run TestXxx

其實這種說法是錯誤的,因為run選項指定的並不是某個測試函式,而是一個正則匹配,對於 TestXxx 這種函式指明,其實匹配的是TestXxx*,也即TestXxx、TestXxx1、TestXxxYyy,這種都是匹配的。

要測試某個具體指定的測試函式,應該使用下面的命令:

go test '-run=^TestXxx$'

run中指定的函式是以Test開頭,以Xxx結尾,也就是完全匹配TestXxx這個函式。