因子代码覆盖

时间:2014-01-22 16:03:26

标签: testing recursion code-coverage

测试递归函数,例如以下阶乘方法;是否有必要测试默认情况?如果我传入3,则输出为7,代码覆盖率报告显示为100%。但是,我没有明确测试factorial(0)。你对此有何看法?

public class Factorial
{
  public static double factorial(int x)
  {
    if (x == 0)
    {
      return 1.0;
    }
    return x + factorial(x - 1);
  }
}

2 个答案:

答案 0 :(得分:1)

代码覆盖率并不能告诉您一切。在这种情况下,您将获得factorial(3)的100%线路覆盖率,但不会涵盖所有“案例”。

在测试递归函数时,您需要测试各种情况:

  • 每个基本案例。
  • 递归案例。
  • 输入不正确(例如,负数)。
  • 任何特定于功能的边缘情况。

您可以减少测试,但是在将来更改代码时,您会留下潜在的错误。

答案 1 :(得分:0)

从技术上讲,如果你测试[well,execute] factorial(2),你还可以测试[execute] factorial(1),如果你的算法是正确的。

您的测试工具如何知道您的代码是否正确?没有编写代码的测试人员如何知道您的代码是否正确? “测试覆盖率”的要点是确定实际上尽可能多的代码已被测试[好,执行],无论它是否在算法上是正确的。

未执行的行是您没有证据可用的行。这就是测试报道告诉你的。测试的目的是检查应用程序计算正确的答案。覆盖范围和测试有两个不同的目的。覆盖恰好利用了测试练习代码的事实。