在Go 函數單元測試中,錯誤處理有兩種主要策略:1. 將錯誤表示為error 類型的具體值,用於斷言預期值;2. 使用通道向測試函數傳遞錯誤,適用於測試並發代碼。實戰案例中,使用錯誤值策略確保函數對負數輸入回傳 0。
單元測試是確保程式碼健全性和可靠性的重要步驟。在 Go 中,可以使用 testing
套件來執行單元測試,其中包含處理錯誤的幾種策略。
Go 中有兩種處理錯誤的主要策略:
#1. 錯誤值
將錯誤表示為error
類型的具體值。要在單元測試中使用此方法,可以將錯誤斷言為預期的值:
func TestMyFunction(t *testing.T) { err := myFunction() if err != nil { t.Errorf("myFunction returned an unexpected error: %v", err) } }
#2.錯誤通道
使用通道向測試函數傳遞錯誤。這對於測試並發程式碼很有用,因為可以同時觀察多個錯誤:
func TestMyConcurrentFunction(t *testing.T) { done := make(chan error) go func() { done <- myConcurrentFunction() }() select { case err := <-done: if err != nil { t.Errorf("myConcurrentFunction returned an unexpected error: %v", err) } case <-time.After(time.Second): t.Errorf("myConcurrentFunction did not complete within the timeout") } }
考慮以下函數,它將切片中的數字相加:
func sum(numbers []int) int { total := 0 for _, num := range numbers { if num < 0 { return 0 } total += num } return total }
使用錯誤值策略進行單元測試,可確保函數對負數輸入回傳0:
func TestSum(t *testing.T) { tests := []struct { input []int result int }{ {[]int{1, 2, 3}, 6}, {[]int{0, 0, 0}, 0}, {[]int{-1, 0, 1}, 0}, } for _, test := range tests { result := sum(test.input) if result != test.result { t.Errorf("sum(%v) returned %d, expected %d", test.input, result, test.result) } } }
以上是Go 函數單元測試的錯誤處理策略的詳細內容。更多資訊請關注PHP中文網其他相關文章!