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

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ì)分析。


[1]https://github.com/golang/go/issues/25223

主站蜘蛛池模板: 深州市| 吴桥县| 越西县| 湘西| 景德镇市| 房产| 乌什县| 喀喇沁旗| 南汇区| 衡山县| 孝昌县| 神农架林区| 阳曲县| 江源县| 扬中市| 杨浦区| 永吉县| 裕民县| 徐水县| 岳普湖县| 沙河市| 垫江县| 中西区| 桂林市| 开封县| 柳林县| 文昌市| 大名县| 石门县| 克东县| 靖边县| 伊春市| 南漳县| 高雄市| 长泰县| 湖南省| 延安市| 丹寨县| 彩票| 磐安县| 滕州市|