A test suite should exercise several things, and they're not always compatible with each other. You will want
- Unit tests - these make sure that foo() accepts a number and outputs a string ... the basic lowest level tests.
- Subsystem tests - these make sure that Foo::Bar does what its supposed to do. You will probably end up using some mock objects here. (Test::MockObject and DBD::Mock will probably be helpful.)
- Integration tests - these make sure that Foo::Bar and Foo::Baz play nicely together. These are really complicated. Don't start here.
- System tests / Acceptance tests - you may not be able to to do these in Perl. Often, you need some outside framework, such as TestRunner or Rational Rose. Also, the developer isn't a good person to do system tests.
This topic has come up a lot in the Monastery. A few of the more notable threads (in no particular order):
Being right, does not endow the right to be rude; politeness costs nothing.
Being unknowing, is not the same as being stupid.
Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.