Before I commit a change, I'd like to be sure that all of it has been tested, either automatically or manually with a code coverage report, but there is lots of legacy code that doesn't have automated tests, and won't be affected by my changes.
Is there a tool that can cross reference a diff from a version control tool with a code coverage report and make sure everything that has been changed has been run?
I realise that with code coverage, this may give a false sense of security, and with something like this, even more so, but I think it would be worth trying. I use git and PHP - I've used XCache's code coverager interface to browse what I have run, and it's useful, but it would be great if something could run automatically at git commit or push time.
The easiest way to exclude code from code coverage analysis is to use ExcludeFromCodeCoverage attribute. This attribute tells tooling that class or some of its members are not planned to be covered with tests. EditFormModel class shown above can be left out from code coverage by simply adding the attribute.
Cobertura is a free Java tool that calculates the percentage of code accessed by tests. It can be used to identify which parts of your Java program are lacking test coverage.
For git diffs, there is a tool named diff-cover, which can check coverage. It takes Cobertura XML coverage reports and compares with the output of git diff
. It then reports coverage information for lines in the diff.
Given the proper coverage xml file, you can use this command to check the coverage of your changes compared to the master
branch:
$ diff-cover coverage.xml
It is also pretty simple to integrate with a CI server, as long as it can provide you with the commit you need to compare with, like $GIT_PREVIOUS_COMMIT
in Jenkins.
You could set up a continuous integration build server (there are lots of excellent, free build servers). One of the build steps would be running code coverage. You could set it up to ignore legacy code and calculate coverage only for non-legacy code. Then you set it up to fail the build if coverage < xx%. Or even fail if coverage % decreases from the previous build.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With