为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 测试中断言错误类型?

如何在 Go 测试中断言错误类型?

Go
红糖糍粑 2023-07-17 16:23:53
我有一个如下定义的错误类型type RetryableError struct {    msg string}func (a *RetryableError) Error() string {    return a.msg}在单元测试中,如果返回的错误是类型,Go 断言的方式是什么RetryableError?
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

使用类型断言:


err := someFunc()

if retryable, ok := err.(*RetryableError); ok {

   // use retryable

}

你的RetryableError不是错误,而是*RetryableError错误。纠正:


func (a RetryableError) Error() string {

    return a.msg

}


查看完整回答
反对 回复 2023-07-17
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

assert.IsType

来自https://medium.com/@sebdah/go-best-practices-testing-3448165a0e18的片段:

func TestDivision(t *testing.T) {

    tests := []struct{

        x      float64

        y      float64

        result float64

        err    error

    }{

        { x: 1.0, y: 2.0, result: 0.5, err: nil },

        { x: -1.0, y: 2.0, result: -0.5, err: nil},

        { x: 1.0, y: 0.0, result: 0.0, err: ErrZeroDivision},

    }

    for _, test := range tests {

        result, err := divide(test.x, test.y)

        assert.IsType(t, test.err, err)

        assert.Equal(t, test.result, result)

    }

}


查看完整回答
反对 回复 2023-07-17
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信