I'm freshly out of college, and starting university somewhere next week. We've seen unit tests, but we kinda not used them much; and everyone talks about them, so I figured maybe I should do some.

The problem is, I don't know what to test. Should I test the common case? The edge case? How do I know that a function is adequately covered?

I always have the terrible feeling that while a test will prove that a function works for a certain case, it's utterly useless to prove that the function works, period.

My personal philosophy has thusfar been:


Test the common case of everything you can.  This will tell you when that code breaks after you make some change (which is, in my opinion, the single greatest benefit of automated unit testing).
Test the edge cases of a few unusually complex code that you think will probably have errors.
Whenever you find a bug, write a test case to cover it before fixing it
Add edge-case tests to less critical code whenever someone has time to kill.

