Unit testing 100%代码覆盖率没有';I don’我不能涵盖所有的真实情况

Unit testing 100%代码覆盖率没有';I don’我不能涵盖所有的真实情况,unit-testing,code-coverage,Unit Testing,Code Coverage,我创造了一个,做了一些,接近100% 在不同的条件、配置等条件下测试应用程序时,应用程序失败了不止一次,因此我创建/增加了当前的测试,以涵盖这些可能性,但可能我仍然遗漏了一些100%覆盖率无法揭示的情况 因此,我想知道是否有一种方法或技术可以补充或帮助覆盖所有可能的排列/情况,并在此基础上创建更好的单元测试和代码覆盖率。增加代码覆盖率可以增加您对代码正确性的信心,但即使覆盖了所有代码路径通过测试,覆盖所有可能的输入通常是不切实际的。以这种方法为例: public static int divid

我创造了一个,做了一些,接近100%

在不同的条件、配置等条件下测试应用程序时,应用程序失败了不止一次,因此我创建/增加了当前的测试,以涵盖这些可能性,但可能我仍然遗漏了一些100%覆盖率无法揭示的情况


因此,我想知道是否有一种方法或技术可以补充或帮助覆盖所有可能的排列/情况,并在此基础上创建更好的单元测试和代码覆盖率。

增加代码覆盖率可以增加您对代码正确性的信心,但即使覆盖了所有代码路径通过测试,覆盖所有可能的输入通常是不切实际的。以这种方法为例:

public static int divide(int numerator, int denominator) {
    return numerator / denominator;
}
@Test
public void testDivide() {
    assertEquals(2, MathHelper.divide(4, 2));
}
您只需编写一个单元测试,就可以覆盖此方法的100%行:

public static int divide(int numerator, int denominator) {
    return numerator / denominator;
}
@Test
public void testDivide() {
    assertEquals(2, MathHelper.divide(4, 2));
}
但在分母=0的情况下,仍然会出现被零除的错误

您所能做的最好的事情就是尽可能多地考虑有趣的边缘案例输入,并围绕它们编写测试。当您遇到新输入的bug时,修复bug并编写新的测试(正如您所做的那样)以防止回归

<> P>也经常有助于考虑库和/或代码的外部依赖性可能出错,它们有许多自己的代码路径,这些代码路径没有出现在只测量代码库的代码覆盖度量中。当数据库不可用时会发生什么?网络不可用?磁盘已满?等等


有关如何更好地思考有趣的边缘案例的一些有用提示,请参见此。

100%的代码覆盖率证明了所有代码都在单元测试中执行。这并不意味着事情不会出错

它也不能证明你有好的代码。例如,如果您使用的是一个访问文件的类,那么您可以模拟和测试所有预期的场景,但好的做法是仍然可以捕获在意外场景中抛出的任何异常-这会创建不稳定的代码块,您如何测试意外情况

虽然这不是一件坏事,但在我看来,更现实的覆盖率在80%左右,但基于多个场景的测试将产生更好的质量

就个人而言,单元测试既要锁定功能,也要证明它是有效的。我宁愿让50个测试重叠相同的核心代码,也不愿用一个备份存储来证明每个属性

不幸的是,除了勤奋和胜任的开发之外,我不知道任何补充技术或指标。

应该解释您的情况。