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

时间:2019-08-29 21:42:35

标签: unit-testing go

我有如下定义的错误类型

type RetryableError struct {
    msg string
}

func (a *RetryableError) Error() string {
    return a.msg
}

在单元测试中,如果返回的错误是RetryableError类型,则断言的Go方法是什么?

2 个答案:

答案 0 :(得分:4)

使用类型断言:

err := someFunc()
if retryable, ok := err.(RetryableError); ok {
   // use retryable
}

答案 1 :(得分:2)

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)
    }
}