The "cost" is paid during development, when it is much more cost effective, and the return is realized during ongoing maintenance, when it is much harder and expensive to fix bugs.
I generally always do unit testing on methods that:
- Read/write to the data store,
- Perform business logic, and
- Validate input
Then, for more complex methods, I'll unit test those. For simple things like getter/setters, or simple math stuff, I don't test.
During maintenance, most legitimate bug reports get a unit test, to insure that the specific bug will not happen again.