我一直致力于处理一些 golang 函数中的软故障,并希望为各种故障场景创建一些单元测试。例如,一些检查包括:
switch err := err.(type) {
case net.Error:
if err.(net.Error).Temporary() || err.(net.Error).Timeout() {
...
}
case *url.Error:
if err, ok := err.Err.(net.Error); ok && err.Timeout() {
...
}
case *net.OpError:
if syscallErr, ok := err.Err.(*os.SyscallError); ok {
if syscallErr.Err == syscall.ECONNRESET {
...
}
}
...
我相信我只需要我的模拟函数来返回与这些条件兼容的错误。我看到 net.Error、net.OpError、url.Error 和 os.SyscallError 类型已导出。但是,我找不到任何人构造 net.Error 值并返回它的示例——人们投入了大量工作来创建一个以各种方式失败的外部进程,但没有返回带有 Timeout 函数的 net.Error 的示例返回真。
同样,我找不到任何包装不是由 fmt.Errorf 产生的错误的示例,因此我不确定在不使用基本内置错误类型时是否涉及更多的错误。Wrap()。
郎朗坤
三国纷争
相关分类