是否有比較Go中非透明錯誤值的最佳做法?測試非透明錯誤值
大多數代碼庫似乎將錯誤視爲不透明(操作成功或失敗,不知道導致錯誤的內部細節)。
這使得編寫單元測試變得很容易,因爲您需要做的就是根據預期錯誤聲明實際錯誤。除此之外,我見過的人中最多的是比較錯誤字符串,以確保它至少包含一些關鍵信息。例如:
if err == nil || !strings.Contains(err.Error(), "not found in the Raft configuration") {
t.Fatalf("err: %v", err)
}
但對於那些需要額外的錯誤信息(如表單驗證,你需要指定無效的字段名稱,值,錯誤代碼,可能還有一些嵌套的錯誤太)的情況下,是什麼你做?
我不能簡單地做一個reflect.DeepEqual()
,因爲錯誤將包含一個唯一的堆棧跟蹤,每次都會使比較失敗。另外,嵌套錯誤會使測試邏輯更加複雜,您需要各種容易出錯的邏輯(循環,遞歸)來比較所需的字段。有沒有一種測試這種性質錯誤的標準方法?
這些值是不是「確定」,你可以檢查它們的存在,以確保它們被設置,然後將它們設置爲它們的零值('「」','nil'等。 ),然後將其餘部分傳遞給'reflect.DeepEqual'。不理想,但有效。 – mkopriva