我一直在尝试了解Go的内置测试框架,并获得适当的测试范围。
在我测试的其中一个文件中,我的覆盖率仅为?87%:
这是测试中涵盖的代码部分:
根据.out文件,测试中未涵盖的部分是" if err!= nil {}"块,这是从标准库调用返回的错误。
尽管我认为除非有硬件故障,否则标准库传递错误的可能性会很小,但我认为最好知道该错误已在应用程序中得到很好的处理。另外,据我所知,检查返回的错误是惯用的Go,所以我认为能够正确测试错误处理会很好。
人们如何处理上述情况下的测试错误?是否有可能获得100%的覆盖率,或者我在做或构造不正确的东西?还是人们跳过测试这些条件?
在许多非硬件故障情况下,大多数标准库函数可能会失败。您是否愿意测试这些是另一个问题。例如,对于
可能更有用的(通常是更好的测试方法)是模拟这些调用,以便您可以在测试期间触发错误,从而可以测试错误案例代码。
但是请注意,出于对代码的热爱,不要以100%的测试覆盖率作为目标。争取有用的测试覆盖率。可以使工具报告的覆盖率达到100%,而不会覆盖有用的案例,并且有可能在不使工具报告覆盖率达100%的情况下覆盖有用的案例。
但是,在大多数程序中(甚至是简单的" Hello World!"),真正的100%覆盖率实际上是不可能的。所以不要为此而瞄准。
正如上面@flimzy所解释的,瞄准100%的覆盖率而不是有用的测试覆盖率是不好的。
尽管您可以对系统调用进行测试,但对代码进行如下修改:
而在测试时
这将帮助您实现100%的覆盖率