in reply to Testing programs
This got me for a while too. The way you're doing it seems to be commonly accepted. I think that if you have procedural functions, you can also require it, and then use the test harness against the subroutines.
One of the most important concepts I got from the thread was that you definitely do not want to get into testing a copy of your code. That will inevitably lead to problems w/ syncronization (and hassle).
Here's a good thread on it: Testing Non-module code