Exclude methods from code coverage with Cobertura

JavaCode CoverageCobertura

Java Problem Overview


Is there a way to exclude code from inclusion into Cobertura coverage reports? We have some methods that should not be included in the coverage report and therefore not drive down the coverage numbers.

I know that Clover has such a functionality, but I have not found anything similar for Cobertura.

Java Solutions


Solution 1 - Java

You can exclude classes from instrumentation. Then they should not appear on reports. See exclude statements below.

You can also ignore calls to some methods. See ignore statement below.

If you are using maven, see http://www.mojohaus.org/cobertura-maven-plugin/usage.html">maven plugin manual.

    <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>

And for ant see http://cobertura.sourceforge.net/anttaskreference.html">this</a>;.

<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>

Solution 2 - Java

This has been breaking my head for some time now.

My problem was that I had the cobertura maven plugin setup in the reporting section instead of the build section.

The instrumentation settings, and hence the excluding of classes or packages, won't be applied if you don't set it up on build section, so watch out for this.

Solution 3 - Java

Remember to exclude inner classes too.

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

It took me ages to notice I was missing an asterisk!

Solution 4 - Java

Cobertura doesn't currently provide such a feature, and neither does Emma (which we use) although it is listed as a forthcoming enhancement - although in the form of an extension to the exclusion rules I believe rather than as an annotation.

Would be handy to cover off those few inaccessible corners cleanly so that you can strive for 100% without being ridiculous.

I think annotations would probably be a friendlier way to do it, but they ought to be fairly explicitly named and based on a list of acceptable scenarios as I fear otherwise something like '@ExcludeFromCoverage' would get added over generously.

Solution 5 - Java

Since 2.0 you can write your own @CoverageIgnore annotation.

It will be recognized by Cobertura, which will avoid considering annotated methods (does not work on classes as far as I know).

  1. Create an empty annotation:
public @interface CoverageIgnore {}
  1. Then annotate the methods you want to exclude from the reports:
public class SomeClass {
    @CoverageIgnore
    public void foo(String baz) {
        // useless stuff
    }
}

Source: https://github.com/cobertura/cobertura/wiki/Coverage-Annotations

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionReneSView Question on Stackoverflow
Solution 1 - JavaJuha SyrjäläView Answer on Stackoverflow
Solution 2 - JavaIker JimenezView Answer on Stackoverflow
Solution 3 - JavaSarah PhillipsView Answer on Stackoverflow
Solution 4 - JavaJasonView Answer on Stackoverflow
Solution 5 - JavaSalvionerView Answer on Stackoverflow