Add code coverage metrics to your maven project

While working on the bitcoinj project I have added support for code coverage collection and tracking. This post summarizes steps you have to take to add that for your own maven projects.

  1. Figure out what type of code coverage you want

For the bitcoinj library it is important to have a “unit test coverage” – it works by verifying which parts of the source code are reached during unit testing phase during build process.
This type of code coverage is the one we usually mean when we say “code coverage”, but it’s important to know that you can also instrument a live application and see which parts of application are used and how frequently – you should consult for example wikipedia here: http://en.wikipedia.org/wiki/Code_coverage or here: http://en.wikipedia.org/wiki/Java_Code_Coverage_Tools and choose the tool you want to use.
Because for libraries we have to focus on “unit test coverage” I have choosen JaCoCo

  1. Add JaCoCo maven plugin
    Adding JaCoCo maven plugin is quite straightforward, those are the parts you have to add to your pom.xml:

Important things to note here:

in excludes we can exclude files from being included in the report – it’s worth to exclude automatically generated files
the jacoco.exec file will be useful in the next steps as well

Additionally you have to update configuration for maven-surefire-plugin:

These 2 plugins work together – JaCoCo will be used as a Java agent during the unit testing phase.
From now on you can just run

Which will rerun all tests and recreate coverage report.
to skip running tests and generating coverage report run maven commands like this:

  1. Setup http://coveralls.io support

As a additional step (especially for projects using travis-ci) you can configure http://coveralls.io/ to keep track of your code coverage over time.

It’s enough to add this maven plugin:

And then in the .travis.yml add this:

  1. Add Intellij IDEA integration
    Following guide works for Intellij Community edition (I have tested this on version 14 but it should work on earlier versions as well)
    To add Intellij integration you have to do following things: