26-Jul-2018

JAVAC.SYNTHMETH - synthetic methods

JAVAC.SYNC - release lock code in synchronized statements

JAVAC.FINALLY - finally block emitted multiple times

JAVAC.ENUM - static methods and initializer generated for enum types

JAVAC.TRYWITH - extra exception handlers installed to close resources in try-with-resources statements

JAVAC.STRINGSWITCH - extra branches due to implementation with hashcode and equals comparison

empty constructor without parameters in enum - Done in 0.8.1

Private empty constructors that do not have arguments

I've recently had a chance to compare test coverage reports between JaCoCo version 0.7.8 and version 0.8.1 and I must say that I'm impressed. Since JaCoCo 0.8.0, new filtering options have been available and enabled that skip some code blocks that really do not need to be tested and do not need to be reported on in test coverage reports.From the JaCoCo developer wiki pages, these are the filters that have been implemented...So what does that mean practically? Well, I've taken a closer look at one particular instance within the code base I'm working on - one of the Enum classes. With the older version of JaCoCo the coverage looked like this...Theandmethods had zero coverage. These methods were not part of the source code that was written so of course they weren't tested. Switching to the new JaCoCo plugin changed the coverage report to exclude these synthetic methods...An 11% improvement in code coverage! Not bad for not doing anything. Of course this didn't mean that the code was better tested, it simply meant that any methods that didn't need testing were not reported on.In terms of the whole code base, code coverage went up by 3%. It's important to note that the number of total counted instructions and branches has reduced with the new version of JaCoCo - again this is because anything that doesn't need testing is not reported on. The code itself has not changed.Here are some more detailed reports on the whole code base for one of the modules I was running this on. Before JaCoCo...After JaCoCo...This is a great improvement to JaCoCo simply because now we don't have to focus on writing those 'fake tests' to increase code coverage just because the reporting tool wasn't smart enough to filter out noise. Hopefully the rest of the filters are implemented soon and JaCoCo becomes even more robust.If you use JaCoCo with PowerMock you may find this article useful - JaCoCo reports missing code coverage for tests using PowerMock -i