in reply to When 100% Code Coverage Backfires

I'm a bit confused. If you need the test, then there must be some way to reach it, if you don't then its not needed. I don't understand how you think you can never reach it AND still must have the condition. If you are afraid of them changing something earlier, then don't you need a test earlier in the code to make sure that it is a comment so that if it is changed that test will fail?

Eric Hodges

Replies are listed 'Best First'.
Re^2: When 100% Code Coverage Backfires
by Ovid (Cardinal) on Mar 26, 2007 at 14:43 UTC

    Rather than put a comment in the code letting people know that the test might fail, it's better to have an assert in there which cannot be ignored. So in this case, I might have something like:

    my $split = Data::Record->new( { split => $comment, unless => $RE{quoted}, chomp => 0, trim => 1, } ); my @chunks = $split->records($line_of_sql); if ( @chunks > 1 ) { assert( $chunks[-2] =~ /$some_text/ ); $chunks[-2] =~ s/$some_text//; # XXX remove comment indicator pop @chunks; # XXX remove comment }

    With that, I never have to worry that someone might change the previous code and silently break the following code. Assertions should be used to assert that things that should never break in fact, do not break. They can take a bit to get used to, but they're very valuable. In this case, it's even better than my initial code because I don't have a silent failure if the chunk does not contain the code that it must contain at that point.


    New address of my CGI Course.