gpt4 book ai didi

go - 如何在保留测试可比性的同时使用动态误差?

转载 作者:数据小太阳 更新时间:2023-10-29 03:19:52 25 4
gpt4 key购买 nike

在go中我经常用

func MyFunc(s someInterface) error {
err := OtherFunc(s)
return fmt.Errorf("something wrong: %s", err)
}

所以我失去了原来的错误值,因为我只是把错误字符串伪造成一个新的错误。这就是我所说的动态错误。

现在考虑对 MyFunc() 进行测试:

func TestMyFunc(t *testing.T) {
s := mockSomeInterface()
testErr := MyFunc(s)
if testErr != interfaceSpecificErrorValue {
t.Errorf("fail")
}
}

interfaceSpecificErrorValue(在本例中特定于 someInterface)我会使用什么?或者我怎样才能使它可测试?

我知道我可以通过预先定义所有可能的错误并给它们一个常量值来解决这个问题。我感兴趣的是是否有另一种方法可以实现此目的,因为我喜欢您可以使用 fmt.Errorf("...: %s, err) 动态构建的分层错误消息. 必须有一个很好的方法来保持错误层次结构而不丢失原始值。

(比较 Error() 方法的输出是一种可能,但不是很好。)

最佳答案

我对此的初步回答是:在 Go 中,目前没有规范的方法来实现具有可比错误值的嵌套错误。

再次阅读了有关错误处理的官方文档和博客文章,以及标准库中的一些源代码,最后提出了这个建议:https://github.com/golang/proposal/blob/master/design/go2draft-error-values-overview.md ,我决定让我的错误类型保持简单和静态,并等待 Go 2 提供更好的方法。

关于go - 如何在保留测试可比性的同时使用动态误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com