我一直在尝试了解Go的内置测试框架,并获得适当的测试范围。

在我测试的其中一个文件中,我的覆盖率仅为?87%:

coverage: 87.5% of statements

这是测试中涵盖的代码部分:

根据.out文件,测试中未涵盖的部分是" if err!= nil {}"块,这是从标准库调用返回的错误。

尽管我认为除非有硬件故障,否则标准库传递错误的可能性会很小,但我认为最好知道该错误已在应用程序中得到很好的处理。另外,据我所知,检查返回的错误是惯用的Go,所以我认为能够正确测试错误处理会很好。

人们如何处理上述情况下的测试错误?是否有可能获得100%的覆盖率,或者我在做或构造不正确的东西?还是人们跳过测试这些条件?

在许多非硬件故障情况下,大多数标准库函数可能会失败。您是否愿意测试这些是另一个问题。例如,对于os.Getwd(),如果工作目录不存在,我可能会期望该调用失败(并且您可以尝试测试此方案)。

可能更有用的(通常是更好的测试方法)是模拟这些调用,以便您可以在测试期间触发错误,从而可以测试错误案例代码。

但是请注意,出于对代码的热爱,不要以100%的测试覆盖率作为目标。争取有用的测试覆盖率。可以使工具报告的覆盖率达到100%,而不会覆盖有用的案例,并且有可能在不使工具报告覆盖率达100%的情况下覆盖有用的案例。

但是,在大多数程序中(甚至是简单的" Hello World!"),真正的100%覆盖率实际上是不可能的。所以不要为此而瞄准。

正如上面@flimzy所解释的,瞄准100%的覆盖率而不是有用的测试覆盖率是不好的。

尽管您可以对系统调用进行测试,但对代码进行如下修改:

而在测试时

这将帮助您实现100%的覆盖率