All excellent advice.
Another approach to determining what your tests should do is to see what you can remove from the code.
Just delete a line or subroutine.
Do all your tests still pass? If so one of the following is true.
- You need to write another test to highlight the defect in the code you've just created.
- You've found a feature that's surplus to requirements - well done you now have a simpler code base.
God I love unit tests :-)
You can even automate this sort of thing if you are that way inclined (see this interview where Java's Jester is discussed for an example).