测试递归函数,例如以下阶乘方法;是否有必要测试默认情况?如果我传入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);
}
}
答案 0 :(得分:1)
代码覆盖率并不能告诉您一切。在这种情况下,您将获得factorial(3)
的100%线路覆盖率,但不会涵盖所有“案例”。
在测试递归函数时,您需要测试各种情况:
您可以减少测试,但是在将来更改代码时,您会留下潜在的错误。
答案 1 :(得分:0)
从技术上讲,如果你测试[well,execute] factorial(2),你还可以测试[execute] factorial(1),如果你的算法是正确的。
您的测试工具如何知道您的代码是否正确?没有编写代码的测试人员如何知道您的代码是否正确? “测试覆盖率”的要点是确定实际上尽可能多的代码已被测试[好,执行],无论它是否在算法上是正确的。
未执行的行是您没有证据可用的行。这就是测试报道告诉你的。测试的目的是检查应用程序计算正确的答案。覆盖范围和测试有两个不同的目的。覆盖恰好利用了测试练习代码的事实。