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

enter image description here

我发现了包括此问题在内的一些问答,但由于帖子的答案相互矛盾,我迷失了方向。 一方面,可以检查Golang中的代码覆盖率。 另一方面,一些提倡者则忽略了对 log.Fatal(err),导致代码覆盖范围小于100%

尝试次数

作为解决方法,我将所有log.Fatal替换为panic,并且由于此答案,我能够测试所有紧急情况并实现100%的代码覆盖率。

问题

尽管我能够获得100%的代码覆盖率,但我并不满意,因为我基本上是滥用panic来获得100%的代码覆盖率。 根据此答案,使用panic

when the program, or its part, has reached an unrecoverable state

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


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


我可以建议的一个技巧是,不要调用log.Fatal,而是使用相同的签名制作自己的致命函数:

包裹中的任何地方。 它可以不导出,因此其他软件包无法设置或使用它。 然后在测试中,您可以将其替换为:

或您想做什么。

我需要测试时间时使用这种技巧。现在或类似的东西。