官术网_书友最值得收藏!

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

平鋪模式的測試代碼組織方式的優點是顯而易見的。

  • 簡單:沒有額外的抽象,上手容易。
  • 獨立:每個測試函數都是獨立的,互不關聯,避免相互干擾。
主站蜘蛛池模板: 新巴尔虎右旗| 西藏| 霍邱县| 肇源县| 铅山县| 信宜市| 涪陵区| 浦江县| 上思县| 四川省| 康马县| 古交市| 塔河县| 芜湖县| 商丘市| 即墨市| 新郑市| 吉安县| 神农架林区| 平和县| 济源市| 陆川县| 团风县| 花垣县| 商河县| 漳州市| 延庆县| 阜阳市| 蒲城县| 福泉市| 新田县| 台南市| 静乐县| 英德市| 开原市| 宁远县| 策勒县| 法库县| 临海市| 闽清县| 兴国县|