有没有办法将代码排除在 Cobertura 覆盖率报告中?我们有一些方法不应包含在覆盖率报告中,因此不会降低覆盖率。
我知道 Clover 有这样的功能,但我没有发现 Cobertura 有任何类似的功能。
有没有办法将代码排除在 Cobertura 覆盖率报告中?我们有一些方法不应包含在覆盖率报告中,因此不会降低覆盖率。
我知道 Clover 有这样的功能,但我没有发现 Cobertura 有任何类似的功能。
您可以从检测中排除类。然后它们不应该出现在报告中。请参阅下面的排除语句。
您还可以忽略对某些方法的调用。请参阅下面的忽略声明。
如果您使用的是 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>
这已经让我头疼了一段时间了。
我的问题是我在报告部分而不是构建部分中设置了 cobertura maven 插件。
如果您不在构建部分进行设置,则不会应用检测设置以及因此排除类或包,因此请注意这一点。
记住也要排除内部类。
<exclude>path/to/class/MyClass*.class</exclude>
我花了很长时间才注意到我错过了一个星号!
Cobertura 目前没有提供这样的功能,Emma(我们使用的)也没有,尽管它被列为即将推出的增强功能 - 尽管我认为是以排除规则的扩展形式而不是作为注释。
将那些难以接近的角落干净地遮盖起来会很方便,这样您就可以在不荒谬的情况下争取 100%。
我认为注释可能是一种更友好的方式,但它们应该被相当明确地命名并基于可接受的场景列表,否则我担心像'@ExcludeFromCoverage'这样的东西会被慷慨地添加。
从 2.0 开始,您可以编写自己的@CoverageIgnore
注释。
它将被 Cobertura 识别,这将避免考虑带注释的方法(据我所知,不适用于类)。
public @interface CoverageIgnore {}
public class SomeClass {
@CoverageIgnore
public void foo(String baz) {
// useless stuff
}
}
来源:https ://github.com/cobertura/cobertura/wiki/Coverage-Annotations