我创建了一个 app , 做了一些 unit tests并接近 100% code coverage .
在不同条件、配置等下测试应用程序时。应用程序不止一次失败,因此我创建/增加了当前测试以涵盖这些可能性,但可能我仍然遗漏了一些情况,即 100% 的覆盖率不会不透露。
因此,我想知道是否有一种方法或技术可以补充或帮助涵盖所有可能的排列/案例,并以此为基础创建更好的单元测试和代码覆盖率。
最佳答案
增加代码覆盖率可以增加您对代码正确性的信心,但即使测试覆盖了所有代码路径,覆盖所有可能的输入通常也是不切实际的.作为示例,采用此方法:
public static int divide(int numerator, int denominator) {
return numerator / denominator;
}
您可以轻而易举地编写一个覆盖该方法 100% 行的单元测试:
@Test
public void testDivide() {
assertEquals(2, MathHelper.divide(4, 2));
}
但是在分母 = 0 的情况下,您仍然会出现被零除的错误。
您能做的最好的事情就是尝试尽可能多地考虑有趣的边缘案例输入,并围绕它们编写测试。当您确实遇到新输入的错误时,修复错误并编写新测试(就像您所做的那样)以防止回归。
考虑库和/或代码的外部依赖项可能出现的问题通常也很有帮助,它们有许多自己的代码路径,而这些路径并没有出现在仅衡量您的代码库的代码覆盖率指标中。当数据库不可用时会发生什么?网络不可用?磁盘已满?等等
有关如何更好地思考有趣的边缘案例的一些有用提示,请参阅此 Quora question .
关于unit-testing - 100% 的代码覆盖率并没有涵盖我所有的真实案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35394641/