Can my build stipulate that my code coverage never get worse?

I am using hudson CI to manage a straight java web project, using ant to build.

I would like to mandate that the unit test coverage never be worse than the previous build, thereby making sure any new code is always tested, or at least the coverage is continually improving.

Is there a hudson plugin that works this way?

Edit: I am currently using Emma, but would be willing to switch to another coverage app.

Also, as a clarification, I’ve seen the thresholds in some Hudson plugins, but that’s not exactly what I’m after. For example what I’d like is that if coverage for Build #12 was 46% overall, and someone checked in Build #13 with 45% coverage, the build would break.

The reason I want to do this, is that I have a codebase with low test coverage. We don’t have time to go back and retroactively write unit tests, but I’d like to make sure that the coverage keeps getting better.

UPDATE: Dan pointed out an edge case with my plan that will definitely be a problem. I think I need to rethink whether this is even a good idea.

Answer

Yes. Which coverage tool are you using?

The Cobertura plugin for Hudson definitely supports this. On the project configuration screen you can specify thresholds.

Alternatively, you can make Ant fail the build (rather than Hudson), by using the cobertura-check task.

EDIT: I’m not sure you can do precisely what you are asking for. Even if you could, it could prove problematic. For example, assume you have an average coverage of 75% but for one class you have coverage of 80%. If you remove that 80% class and all of its tests, you reduce the overall coverage percentage even though none of the other code is any less tested than previously.

Leave a Reply

Your email address will not be published. Required fields are marked *