Coming back to code after a little time is an interesting experience. Almost every time you can guarantee a few nuggets of insight that hadn't occurred previously.
Today's lesson: if it's difficult writing a unit test for (usual suspects being the
FileNotFoundException
s and if(x == null)
) conditions), it's probably not worth having in the code.I'm not normally one for striving for 100% code coverage with tests. Like all things that fall under the agile/XP umbrella, if you're doing it by the book, you're doing it wrong. There isn't a book that tells you how you should be working on your projects.
However, in this instance, I thought it would be an interesting exercise to try and get up to 100%. By getting OCD on the unit tests, I found at least two conditions in my code that couldn't actually occur:
- a null check on an object right after it's constructor was called, and
- an exception thrown from code where I was using dynamic assignment where static assignment was sufficient.
try {Can you write a test that exercises the catch block? Nope. This was a remnant of old code that hadn't been cleaned up. What I should have been doing was
lib = Class.forName("java.lang.Math");
} catch (ClassNotFoundException e) {
//how do I get here?
}
lib = java.lang.Math.class;
which doesn't throw any exception.
It's good to remember that adding test cases is not the only way to get closer to 100% code coverage - deleting code does just as well.
1 comment:
Very interesting post. At first I don't know why your post catches my attention. But when I started reading it. Programming always interests me and I really need this one.
Post a Comment