首頁 > 後端開發 > Golang > 主體

Go 函數單元測試的錯誤處理策略

WBOY
發布: 2024-05-02 11:21:01
原創
983 人瀏覽過

在Go 函數單元測試中,錯誤處理有兩種主要策略:1. 將錯誤表示為error 類型的具體值,用於斷言預期值;2. 使用通道向測試函數傳遞錯誤,適用於測試並發代碼。實戰案例中,使用錯誤值策略確保函數對負數輸入回傳 0。

Go 函数单元测试的错误处理策略

Go 函數單元測試的錯誤處理策略

單元測試是確保程式碼健全性和可靠性的重要步驟。在 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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板