【发布时间】:2010-08-20 02:19:54
【问题描述】:
是否可以使用 Cobertura 告诉它忽略由 start 和 end cmets 标识的某些代码位?
例如,
public class Foo {
public void static doSomething() {
...
// Cobertura-Ignore-Start
...
// Cobertura-Ignore-End
}
将导致 Cobertura 在计算覆盖率统计信息时不包括开始和结束 cmets 之间的代码。
编辑:我正在使用 cobertura Ant 任务。
【问题讨论】:
-
你为什么要这样做?
-
有很多原因,但我会举一个例子。假设您有一个测试类,代码如下所示: public void testSomething() { try { doSomething();失败(); } catch (Exception e) { // 检查异常} } - 所以本质上这是为了确保 doSomething() 会抛出异常但是 fail();除非您的测试实际上被破坏,否则永远不会被调用。因此,如果您想要 100% 的测试覆盖率并且所有测试都按预期通过,那么包含 fail(); 的行将需要表示为不应由 cobertura 检查的线。希望这有点道理。
-
不被调用失败将如何影响您的代码覆盖率...因为这是测试类的一部分...
-
覆盖率也应该是您在测试代码上运行的东西。您不希望代码库中到处都是陈旧的死代码。测试代码是一等公民,也是生产代码。只要我们能识别出诸如fail()之类的区域,我们的系统就有100%的覆盖率;并告诉 cobertura 不要看那些显然不会在工作构建中调用的东西。
-
此外,当您拥有 100% 的覆盖率时,很容易看到死代码(即当您的覆盖率低于 100% 时 - 无论是生产代码还是测试代码)