2017-02-04 140 views
1

當您使用返回類型爲error的單元測試函數時,我想知道如何正確地對這個錯誤進行單元測試。你是否應該檢查錯誤是零還是不是零?或者你是否應該驗證錯誤字符串是否與期望的字符串匹配?如何進行單元測試出錯

回答

1

在大多數情況下,您可以檢查錯誤是否不爲零。

我建議不要檢查錯誤字符串,除非絕對必要。我通常認爲錯誤字符串只能用於人類消費。

如果您需要更多關於錯誤的詳細信息,更好的選擇是自定義錯誤類型。然後,您可以切換錯誤(類型)並查看它是否是您期望的類型。 如果您需要更多詳細信息,可以使自定義錯誤類型包含您可以在測試中檢查的值。

Go的錯誤只是一個具有Error() string方法的類型的接口,因此自己實現它們很簡單。 https://blog.golang.org/error-handling-and-go

+0

我喜歡使用自定義錯誤類型的想法,這肯定會簡化一些事情。 – GabeMeister

2

是的我測試我的函數返回錯誤,並檢查它,如果錯誤消息匹配。但這取決於你是否要檢查它或只檢查錯誤是不是nil

假設你有這樣的功能:

func returnSomeErr(input int)error{ 
    if input > 0{ 
     return nil 
    } 
    return errors.New("this is error message") 
} 

可以進行單元測試這樣的錯誤消息:

// testing tot get error message 
func TestReturnSomeErr(t *testing.T){ 
    Expected := "this is error message" 
    actual := returnSomeErr(-1) 

    if actual.Error() != Expected{ 
     t.Errorf("Error actual = %v, and Expected = %v.", actual, test.Expected) 

    } 

} 

請注意,我用.Error()函數來獲取錯誤消息,以便我可以將它與字符串進行比較。如果輸入數據爲> 0,您可以創建另一個測試來測試是否沒有錯誤。