- Go語言精進(jìn)之路:從新手到高手的編程思想、方法和技巧(2)
- 白明
- 615字
- 2022-01-04 17:42:17
40.1 官方文檔的“自相矛盾”
Go原生支持測試的兩大要素——go test命令和testing包,它們是Gopher學(xué)習(xí)Go代碼測試的必經(jīng)之路。
下面是關(guān)于testing包的一段官方文檔(Go 1.14版本)摘錄:
要編寫一個(gè)新的測試集(test suite),創(chuàng)建一個(gè)包含TestXxx函數(shù)的以_test.go為文件名結(jié)尾的文件。將這個(gè)測試文件放在與被測試包相同的包下面。編譯被測試包時(shí),該文件將被排除在外;執(zhí)行g(shù)o test時(shí),該文件將被包含在內(nèi)。
同樣是官方文檔,在介紹go test命令行工具時(shí),Go文檔則如是說:
那些包名中帶有_test后綴的測試文件將被編譯成一個(gè)獨(dú)立的包,這個(gè)包之后會(huì)被鏈接到主測試二進(jìn)制文件中并運(yùn)行。
對比這兩段官方文檔,我們發(fā)現(xiàn)了一處“自相矛盾”[1]的地方:testing包文檔告訴我們將測試代碼放入與被測試包同名的包中,而go test命令行幫助文檔則提到會(huì)將包名中帶有_test后綴的測試文件編譯成一個(gè)獨(dú)立的包。
我們用一個(gè)例子來直觀說明一下這個(gè)“矛盾”:如果我們要測試的包為foo,testing包的幫助文檔告訴我們把對foo包的測試代碼放在包名為foo的測試文件中;而go test命令行幫助文檔則告訴我們把foo包的測試代碼放在包名為foo_test的測試文件中。
我們把將測試代碼放在與被測包同名的包中的測試方法稱為“包內(nèi)測試”。可以通過下面的命令查看哪些測試源文件使用了包內(nèi)測試:
$go list -f={{.TestGoFiles}} .
我們把將測試代碼放在名為被測包包名+"_test"的包中的測試方法稱為“包外測試”。可以通過下面的命令查看哪些測試源文件使用了包外測試:
$go list -f={{.XTestGoFiles}} .
那么我們究竟是選擇包內(nèi)測試還是包外測試呢?在給出結(jié)論之前,我們將分別對這兩種方法做一個(gè)詳細(xì)分析。
- Docker進(jìn)階與實(shí)戰(zhàn)
- Mastering Kali Linux for Web Penetration Testing
- 利用Python進(jìn)行數(shù)據(jù)分析(原書第3版)
- Oracle從入門到精通(第5版)
- 前端HTML+CSS修煉之道(視頻同步+直播)
- Java EE 8 Application Development
- C++寶典
- Building Machine Learning Systems with Python(Second Edition)
- Azure Serverless Computing Cookbook
- Scala Functional Programming Patterns
- Shopify Application Development
- Python物理建模初學(xué)者指南(第2版)
- MySQL從入門到精通
- 深入實(shí)踐C++模板編程
- Instant AppFog