- Go語言精進之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 475字
- 2022-01-04 17:42:18
41.1 經典模式——平鋪
Go從對外發布的那一天起就包含了go test命令,這個命令會執行_test.go中符合TestXxx命名規則的函數進而實現測試代碼的執行。go test并沒有對測試代碼的組織提出任何約束條件。于是早期的測試代碼采用了十分簡單直接的組織方式——平鋪。
下面是對Go 1.5版本標準庫strings包執行測試后的結果:
# go test -v . === RUN TestCompare --- PASS: TestCompare (0.00s) === RUN TestCompareIdenticalString --- PASS: TestCompareIdenticalString (0.00s) === RUN TestCompareStrings --- PASS: TestCompareStrings (0.00s) === RUN TestReader --- PASS: TestReader (0.00s) ... === RUN TestEqualFold --- PASS: TestEqualFold (0.00s) === RUN TestCount --- PASS: TestCount (0.00s) ... PASS ok strings 0.457s
我們看到,以strings包的Compare函數為例,與之對應的測試函數有三個:TestCompare、TestCompareIdenticalString和TestCompareStrings。這些測試函數各自獨立,測試函數之間沒有層級關系,所有測試平鋪在頂層。測試函數名稱既用來區分測試,又用來關聯測試。我們通過測試函數名的前綴才會知道,TestCompare、TestCompareIdenticalString和TestCompareStrings三個函數是針對strings包Compare函數的測試。
在go test命令中,我們還可以通過給命令行選項-run提供正則表達式來匹配并選擇執行哪些測試函數。還以strings包為例,下面的命令僅執行測試函數名字中包含TestCompare前綴的測試:
# go test -run=TestCompare -v . === RUN TestCompare --- PASS: TestCompare (0.00s) === RUN TestCompareIdenticalString --- PASS: TestCompareIdenticalString (0.00s) === RUN TestCompareStrings --- PASS: TestCompareStrings (0.00s) PASS ok strings 0.088s
平鋪模式的測試代碼組織方式的優點是顯而易見的。
- 簡單:沒有額外的抽象,上手容易。
- 獨立:每個測試函數都是獨立的,互不關聯,避免相互干擾。