我在 Eclipse 中使用 Eclemma 来向我展示我的类的测试覆盖率。但即使线路和分支覆盖率都是 100%,仍然可能存在单元测试未覆盖的情况。
例子:
public double myCos(double angle) {
return Math.cos(angle);
}
如果我使用测试类中的参数 Math.PI 调用此方法,则行、分支和路径覆盖率将是 100%,但是使用这种方法我还没有测试所有相关的边界情况,例如 Math.cos(Math.PI * 0.5)、Math.cos(0)、Math.cos(Math.PI * 1.5) 等。
我知道在这种情况下强制执行代码覆盖的唯一方法是按以下方式编写代码:
public double myCos(double angle) {
if (angle == Math.PI) {
//Don't do anything. This is only for the coverage tool to enforce
//border case testing to achieve 100% coverage
}
//...other border cases
return Math.cos(angle);
}
这样,测试代码必须经过边界案例才能达到 100% 的分支覆盖率。
这显然不是实现该方法的最佳方式。有什么替代方案可以解决这个问题?代码覆盖工具中是否有任何注释可以更方便地标记边界情况?通常,处理我的示例的最佳实践是什么?