in reply to How deep should unit tests go?

What do you Monks think?

It depends :-)

It it were me I would have started off with a test for addToAccount() before I wrote any code - since that's the public API. Maybe something like (guessing at the rest of the API):

my $account = Account->new; $account->addToAccount( 10 ); is( $account->getCreditAmount, 10, 'added ten' );

And gone ahead and written the code. I might then have spotted that the &{$closure}( "CREDITAMOUNT", $amount ) wasn't revealing my intention much, and told my subclasses about the implementation decision I made and then factored it out into the base class. If I was confident of the other tests of the methods like addToAccount that callled setCreditAmount then I probably wouldn't add any more.

If I decided to make it protected as you have done I would have written a test to make sure the exception would be thrown in the appropriate context before I added the caller test:

{ package NotASubclass; use Test::Exception; throws_ok { Account->new-> setCreditAmount( 42 ) } qr/is_protected/; }

because that's new code and new functionality and I would want to make sure it works.

(although personally I wouldn't have bothered adding the test since I find that adding this sort of thing doesn't seem to solve any problems... I also would use methodNamingThatHurtsMyEyes :-)