如何在 Golang 中获得 100% 的代码覆盖率?

我无法获得 100% 的代码覆盖率,因为我无法在 Golang 中测试 Fatals。

http://img4.mukewang.com/619b73ea0001bfb002340067.jpg

我找到了一些问答,包括这个,但我迷路了,因为帖子的答案是矛盾的。一方面可以在 Golang 中检查代码覆盖率。另一方面,有些人主张忽略 eg 的测试log.Fatal(err),导致代码覆盖率小于100%.


尝试

作为一种解决方法,我全部替换log.Fatalpanic并感谢这个答案,我能够测试所有的恐慌并实现 100% 的代码覆盖率。


问题

虽然我能够获得 100% 的代码覆盖率,但我并不高兴,因为我基本上是在滥用panic以获得 100% 的代码覆盖率。根据这个答案apanic使用:

当程序或其部分达到不可恢复状态时

根据这个定义,我的代码中有多个片段可以引发恐慌,而log.Fatal应该使用 a 。


明月笑刀无情
浏览 162回答 2
2回答

绝地无双

出于这个原因,我发现除了 main 之外的所有函数和包返回错误而不是直接调用 log.Fatal 都很有用。然后它可以是主要的决定是否退出错误。尽管在很多情况下尝试获得 100% 的测试覆盖率可能会导致收益递减,因此称其为足够好也可以。

慕田峪7331174

我可以建议的一个技巧是,不要调用log.Fatal,而是使用相同的签名制作自己的致命函数:var fatal func(...interface{}) = log.Fatal在您的包裹中的任何地方。它可以是未导出的,因此其他包无法设置或使用它。然后在您的测试中,您可以将其替换为:fatal = func(v ...interface){    panic(fmt.Sprint(v...))}或者你想做的任何事情。当我需要测试 time.Now 或类似的东西时,我会使用这种技巧。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go