在 go 函數(shù)單元測試中,錯誤處理有兩種主要策略:1. 將錯誤表示為 error 類型的具體值,用于斷言預(yù)期值;2. 使用通道向測試函數(shù)傳遞錯誤,適用于測試并發(fā)代碼。實戰(zhàn)案例中,使用錯誤值策略確保函數(shù)對負數(shù)輸入返回 0。
Go 函數(shù)單元測試的錯誤處理策略
單元測試是確保代碼健壯性和可靠性的重要步驟。在 Go 中,可以使用 testing
包來執(zhí)行單元測試,其中包含處理錯誤的幾種策略。
錯誤處理策略
Go 中有兩種處理錯誤的主要策略:
1. 錯誤值
將錯誤表示為 error
類型的具體值。要在單元測試中使用此方法,可以將錯誤斷言為預(yù)期的值:
func TestMyFunction(t *testing.T) { err := myFunction() if err != nil { t.Errorf("myFunction returned an unexpected error: %v", err) } }
登錄后復(fù)制
2. 錯誤通道
使用通道向測試函數(shù)傳遞錯誤。這對于測試并發(fā)代碼很有用,因為可以同時觀察多個錯誤:
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") } }
登錄后復(fù)制
實戰(zhàn)案例
考慮以下函數(shù),它將切片中的數(shù)字相加:
func sum(numbers []int) int { total := 0 for _, num := range numbers { if num < 0 { return 0 } total += num } return total }
登錄后復(fù)制
使用錯誤值策略進行單元測試,可以確保函數(shù)對負數(shù)輸入返回 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) } } }
登錄后復(fù)制