【问题标题】:Configure cobertura to ignore certain blocks of code配置 cobertura 以忽略某些代码块
【发布时间】: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% 时 - 无论是生产代码还是测试代码)

标签: java cobertura


【解决方案1】:

不,这是不可能的。 Cobertura 没有可以跳过代码的功能。唯一可以忽略的是对某些包和/或类的方法调用。

您可能必须深入研究代码,看看是否有可能以忽略块的方式对其进行扩展。

【讨论】:

    【解决方案2】:

    据我所知,您只能在类级别忽略(这意味着忽略的类中的任何方法都不会被计算在内,但它会被检测,但这样做不会加快速度)。

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2018-12-06
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多