亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何處理 go 測試用例中的 json 語法錯誤?

如何處理 go 測試用例中的 json 語法錯誤?

Go
素胚勾勒不出你 2022-11-28 14:35:23
json.Unmarshall我正在測試失敗并返回的場景&json.SyntaxError{msg:"unexpected end of JSON input", Offset:0}代碼是這樣的:err = json.Unmarshal(input, &data)if err != nil {    return nil, err}測試用例預計會出現這種類型的錯誤:{...errorType: &json.SyntaxError{},...}斷言是這樣的:assert.Equal(t, tt.errorType, err)這是失敗的,因為錯誤消息不同:expected: &json.SyntaxError{msg:"", Offset:0}actual  : &json.SyntaxError{msg:"unexpected end of JSON input", Offset:0}我該如何處理?也許利用Error()?
查看完整描述

1 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

首先,不可能直接制作這個哨兵錯誤:

_ = &json.SyntaxError{msg: "unexpected end of JSON input", Offset: 0}  // msg field is not exported

最接近的是檢查錯誤類型。為此,請使用errors.As

var tt *json.SyntaxError


if errors.As(err, &tt) {

    log.Printf("Syntax Error: %v", tt)

} else if err != nil {

    log.Fatalf("Fatal: %#v", err)

}

https://go.dev/play/p/mlqGN2ypwBs

您可以檢查Offset公共領域。但是要比較非公共msg領域,您需要使用err.Error()- 但這可能很脆弱,因為措辭可能會隨著時間而改變。


注意: errors.Is不能在這里使用,因為它只測試錯誤相等性:直接;或通過error.Unwrap -ing。

由于這里的 json.SyntaxError沒有被包裝——也不是一個哨兵錯誤——它不能通過匹配errors.Is


查看完整回答
反對 回復 2022-11-28
  • 1 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號