我无法获得 100% 的代码覆盖率,因为我无法在 Golang 中测试 Fatals。我找到了一些问答,包括这个,但我迷路了,因为帖子的答案是矛盾的。一方面可以在 Golang 中检查代码覆盖率。另一方面,有些人主张忽略 eg 的测试log.Fatal(err),导致代码覆盖率小于100%.尝试作为一种解决方法,我全部替换log.Fatal为panic并感谢这个答案,我能够测试所有的恐慌并实现 100% 的代码覆盖率。问题虽然我能够获得 100% 的代码覆盖率,但我并不高兴,因为我基本上是在滥用panic以获得 100% 的代码覆盖率。根据这个答案apanic使用:当程序或其部分达到不可恢复状态时根据这个定义,我的代码中有多个片段可以引发恐慌,而log.Fatal应该使用 a 。
2 回答
绝地无双
TA贡献1946条经验 获得超4个赞
出于这个原因,我发现除了 main 之外的所有函数和包返回错误而不是直接调用 log.Fatal 都很有用。然后它可以是主要的决定是否退出错误。尽管在很多情况下尝试获得 100% 的测试覆盖率可能会导致收益递减,因此称其为足够好也可以。
慕田峪7331174
TA贡献1828条经验 获得超13个赞
我可以建议的一个技巧是,不要调用log.Fatal,而是使用相同的签名制作自己的致命函数:
var fatal func(...interface{}) = log.Fatal
在您的包裹中的任何地方。它可以是未导出的,因此其他包无法设置或使用它。然后在您的测试中,您可以将其替换为:
fatal = func(v ...interface){
panic(fmt.Sprint(v...))
}
或者你想做的任何事情。
当我需要测试 time.Now 或类似的东西时,我会使用这种技巧。
- 2 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消