go語言開發中,對測試檔案和測試函式有特殊的約定:
測試檔案必須以_test.go結尾
測試檔案內的測試函式,必須用Test開頭
這樣使用go test 命令時,系統自動檢測當前目錄和子目錄下以 _test.go
結尾的檔案,並查詢其中以 Test
開頭的函式。
go test
測試過程是完全獨立的,在記憶體中進行,並不會與正在執行的例項產生互動,也不需要啟動例項。
如果你的測試檔案不在當前目錄,或者沒有遵循命名規範,Go 將提示錯誤:
github.com/cloudreve/Cloudreve/v3 [no test files]
TestMain函式
執行測試go test時,TestMain
函式會首先執行初始化操作,然後依次執行檢測到的測試函式。
#看到詳細的測試輸出 go test -v # 執行指定的測試函式,例如:/routers/router_test.go中函式 func TestPing(t *testing.T) { asserts := assert.New(t) router := InitMasterRouter() w := httptest.NewRecorder() req, _ := http.NewRequest("GET", "/api/v3/site/ping", nil) router.ServeHTTP(w, req) assert.Equal(t, 200, w.Code) asserts.Contains(w.Body.String(), "Pong") } # 執行指定的測試函式,`^TestPing$` 是一個正規表示式,精確匹配 `TestPing` 函式的名稱 go test -run ^TestPing$ 或者,看到詳細的測試輸出 go test -v -run ^TestPing$ # 把所有輸出儲存到 `test.log` 檔案中 go test -v -run ^TestPing$ 2>&1 | tee test.log
GCC
go test
在編譯和執行測試時,通常需要使用 C 編譯器(如 gcc
),特別是在涉及到 Cgo 或一些依賴項時。
gcc
通常指的是 GNU Compiler Collection,它是一個廣泛使用的編譯器,支援多種程式語言,包括 C、C++、Go 等。
安裝 gcc
編譯器: 在終端中執行以下命令:
sudo dnf install gcc
gcc
在 Go 語言中的作用
Cgo 支援:
Go 語言透過
cgo
工具與 C 語言程式碼進行互操作,允許 Go 程式碼呼叫 C 函式或者連結 C 庫。要使用cgo
,系統中需要安裝 C 編譯器(如gcc
),因為cgo
需要將 C 程式碼編譯成可執行的機器碼。例如,如果你在 Go 專案中使用了
cgo
,編譯和執行時gcc
會被用來編譯嵌入的 C 程式碼。編譯和連結:
在某些情況下,Go 語言本身可能會依賴系統的編譯工具鏈(如
gcc
)來處理底層的編譯和連結工作,特別是在涉及到跨編譯(編譯到不同平臺)或者與系統庫互動時。錯誤與提示:
如果
gcc
沒有安裝,執行cgo
相關程式碼時會出現類似cgo: C compiler "gcc" not found
的錯誤提示。這表明系統找不到gcc
,無法進行編譯。
測試的獨立性
測試函式TestPing中,使用的是 httptest.NewRecorder()
來模擬 HTTP 請求,並不會影響已經在執行的伺服器。測試過程是完全獨立的,在記憶體中進行,並不會與正在執行的例項產生互動。