55

有没有办法将代码排除在 Cobertura 覆盖率报告中?我们有一些方法不应包含在覆盖率报告中,因此不会降低覆盖率。

我知道 Clover 有这样的功能,但我没有发现 Cobertura 有任何类似的功能。

4

5 回答 5

59

您可以从检测中排除类。然后它们不应该出现在报告中。请参阅下面的排除语句。

您还可以忽略对某些方法的调用。请参阅下面的忽略声明。

如果您使用的是 maven,请参阅maven 插件手册

    <configuration>
      <instrumentation>
        <ignores>
          <ignore>com.example.boringcode.*</ignore>
        </ignores>
        <excludes>
          <exclude>com/example/dullcode/**/*.class</exclude>
          <exclude>com/example/**/*Test.class</exclude>
        </excludes>
      </instrumentation>
    </configuration>

而对于蚂蚁来说,请看这个

<cobertura-instrument todir="${instrumented.dir}">
  <ignore regex="org.apache.log4j.*" />
  <fileset dir="${classes.dir}">
    <include name="**/*.class" />
    <exclude name="**/*Test.class" />
  </fileset>
  <fileset dir="${jars.dir}">
    <include name="my-simple-plugin.jar" />
  </fileset>
</cobertura-instrument>
于 2009-06-04T16:31:35.027 回答
21

这已经让我头疼了一段时间了。

我的问题是我在报告部分而不是构建部分中设置了 cobertura maven 插件。

如果您不在构建部分进行设置,则不会应用检测设置以及因此排除类或包,因此请注意这一点。

于 2011-07-25T12:01:26.693 回答
17

记住也要排除内部类。

<exclude>path/to/class/MyClass*.class</exclude>

我花了很长时间才注意到我错过了一个星号!

于 2012-11-26T14:54:32.453 回答
4

Cobertura 目前没有提供这样的功能,Emma(我们使用的)也没有,尽管它被列为即将推出的增强功能 - 尽管我认为是以排除规则的扩展形式而不是作为注释。

将那些难以接近的角落干净地遮盖起来会很方便,这样您就可以在不荒谬的情况下争取 100%。

我认为注释可能是一种更友好的方式,但它们应该被相当明确地命名并基于可接受的场景列表,否则我担心像'@ExcludeFromCoverage'这样的东西会被慷慨地添加。

于 2010-12-30T11:23:40.647 回答
0

从 2.0 开始,您可以编写自己的@CoverageIgnore注释。

它将被 Cobertura 识别,这将避免考虑带注释的方法(据我所知,不适用于类)。

  1. 创建一个空注释:
public @interface CoverageIgnore {}
  1. 然后注释要从报告中排除的方法:
public class SomeClass {
    @CoverageIgnore
    public void foo(String baz) {
        // useless stuff
    }
}

来源:https ://github.com/cobertura/cobertura/wiki/Coverage-Annotations

于 2019-01-22T08:54:39.270 回答