Go 中的go test 指令提供靈活的測試案例機制,包括:命名規則:Test<功能名稱>,參數為*testing.T斷言:驗證期望值和實際值是否一致,例如t.Equal()和t.Error()子測試:分解大型測試案例為更小的部分,使用t.Run() 建立表格測試:使用表格資料運行測試案例,使用t.RunTable() 建立實戰案例:示範使用go test測試Web 服務
在Go 中,使用go test
指令進行測試可以確保程式碼的正確性和可靠性。它的強大功能來自靈活且可擴展的測試案例機制。
測試案例函數的命名規則遵循以下格式:Test<功能或模組名稱>
。每個測試案例函數必須有一個 *testing.T
類型參數,用於報告測試狀態和其他資訊。
import "testing" func TestAdd(t *testing.T) { // ... 测试代码 }
斷言是用來驗證期望值和實際值是否一致的函數。 Go 的測試套件提供了幾個斷言函數,例如:
t.Equal(a, b)
:驗證a 等於bt .NotEqual(a, b)
:驗證a 不等於bt.True(x)
:驗證x 為truet.False (x)
:驗證x 為falset.Error(err)
:驗證err 不為nil子測試允許將大型測試案例分解成較小的、可管理的部分。使用 t.Run()
函數建立子測試,傳遞子測試名稱和一個測試函數。
func TestMath(t *testing.T) { t.Run("add", func(t *testing.T) { // 测试加法的子测试 }) t.Run("subtract", func(t *testing.T) { // 测试减法的子测试 }) }
表格測試可讓您使用表格資料執行一組測試案例。使用 t.RunTable()
函數建立表格測試,傳遞表格資料和一個測試函數。
func TestTable(t *testing.T) { type Input struct { a, b int } tests := []Input{ {1, 2}, {3, 4}, {5, 6}, } t.RunTable("add", func(t *testing.T, in Input) { // 测试 add 函数,使用 in.a 和 in.b }, tests) }
下面是一個使用go test
測試Web 服務的範例:
import ( "net/http" "net/http/httptest" "testing" ) func TestGetProducts(t *testing.T) { // 创建一个模拟 HTTP 请求 req, err := http.NewRequest("GET", "/api/products", nil) if err != nil { t.Fatal(err) } // 创建一个响应记录器 rr := httptest.NewRecorder() // 调用正在测试的处理程序 http.HandlerFunc("/api/products", getProducts).ServeHTTP(rr, req) // 验证响应的状态码 if status := rr.Code; status != http.StatusOK { t.Errorf("错误的状态码:%d", status) } // 验证响应 body expected := `{"products": [{"id": 1, "name": "Product 1"}, {"id": 2, "name": "Product 2"}]}` if body := rr.Body.String(); body != expected { t.Errorf("错误的响应 body:%s", body) } }
go test
是一個強大的工具,可讓您建立和管理各種測試案例。充分利用斷言、子測試和表格測試的功能,您可以編寫全面和可靠的測試,提高程式碼的品質和可靠性。
以上是利用 go test 來探索測試案例的奧秘的詳細內容。更多資訊請關注PHP中文網其他相關文章!