Although RCov makes code coverage in Ruby dead simple, I wasn’t sure how easy this would be to achieve with Java. The first free tool I found is called EMMA and it was surprisingly easy to setup, especially since the documentation isn’t geared toward getting coverage during tests (but getting it during execution).
EMMA works by instrumenting the classfiles to analyze coverage. Although it can do just-in-time instrumentation, that didn’t seem to work for recording coverage via TestNG. The offline instrumentation makes is pretty easy to use with anything. Basically, you want your ANT file to:
- Compile your code
- Use EMMA to instrument your classes to a different directory
- Run your tests, using the instrumented classes first in your classpath and passing a few system properties to your running code
- Run EMMA’s report generator on the output
Here’s my test.xml I’m using in my fork of ImportScrubber that shows it all working together. All in all, it only took about 15 minutes to set up and debug. Of course, now, the tests that came with ImportScrubber provide almost no coverage, but that’s another story….