切換語言為:簡體

測試函式和go test的使用

  • 爱糖宝
  • 2024-09-05
  • 2049
  • 0
  • 0

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 語言中的作用

  1. Cgo 支援

    • Go 語言透過 cgo 工具與 C 語言程式碼進行互操作,允許 Go 程式碼呼叫 C 函式或者連結 C 庫。要使用 cgo,系統中需要安裝 C 編譯器(如 gcc),因為 cgo 需要將 C 程式碼編譯成可執行的機器碼。

    • 例如,如果你在 Go 專案中使用了 cgo,編譯和執行時 gcc 會被用來編譯嵌入的 C 程式碼。

  2. 編譯和連結

    • 在某些情況下,Go 語言本身可能會依賴系統的編譯工具鏈(如 gcc)來處理底層的編譯和連結工作,特別是在涉及到跨編譯(編譯到不同平臺)或者與系統庫互動時。

  3. 錯誤與提示

    • 如果 gcc 沒有安裝,執行 cgo 相關程式碼時會出現類似 cgo: C compiler "gcc" not found 的錯誤提示。這表明系統找不到 gcc,無法進行編譯。

測試的獨立性

測試函式TestPing中,使用的是 httptest.NewRecorder() 來模擬 HTTP 請求,並不會影響已經在執行的伺服器。測試過程是完全獨立的,在記憶體中進行,並不會與正在執行的例項產生互動。

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.