Search The Blog
About this site

@RoyOsherove

Subscribe!

This site aims to connect all the dots of my online activities - from tools, books blogs and twitter accounts, to upcoming conferences, engagements and user group talks.

from 5whys.com
Twitter: @RoyOsherove
My Book: The Art of Unit Testing
Latest Posts
« When should you remove or change a unit test? | Main | A Unit test should test only one thing »
Sunday
Apr032005

Test Coverage and testing angles

How do you know if you have good coverage on your new code?

Try and remove a line or a constraint check. If all tests still pass – you don't have enough code coverage and you probably need to add another unit test.

The best way to make sure you are adding the correct test is to not let yourself uncomment that line or check until you can produce a test that will fail until you uncomment it. It may be hard but if you can’t think of a way this would fail, you probably don’t have a good excuse for writing that line of code, do you?

 

Why is this a problem? Because you never know when the next developer will show up and try to play with your code, maybe try to optimize it, or wrongly delete some precious line of your code.  If you don’t have a test that will fail, they will never know they made a mistake.

 

You might also want to try and replace various usage of parameters that are passed in to your method with consts. For example given this method,

 

Public int Sum(int x, int y, bool allowNegatives)
{
   If(!allowNegatives)
{
        If(x<0||y<0)
        Throw new Exception();
}
   Return x+y;
}

 

here are some variations of testing for test coverage:

   

If(!true)
{
        If(x<0||y<0)
        Throw new Exception();
}
 
Or
 
   If(!allowNegatives)
{
        If(false||y<0)
        Throw new Exception();
}
 
Or
 
If(!allowNegatives)
{
        If(x<0||false)
        Throw new Exception();
}

If all the tests still pass, you’re missing a test.

 

Another red flag: If you have only one test that checks for various equality to values.

Seeing this:

Assert.AreEqual(3,retval);

Happen only once in relation to some method usually means you can safely return 3 as a value and all the tests for this method will still pass.

 

PrintView Printer Friendly Version

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>