Testing is an art of its own. It is a different thing to know how to develop than how to test. Ideally you have to be as a good a developer as you are a tester. But it is a different skillset. Sometimes you cannot test because you do not have the knowledge of how to do so, or you cannot see the value. These things become clear with experience and when I say experience I mean the failures.
The sad part is that you should have some technical (and architectural) experience in order to be a able to test but that experience comes after you have written some untested code (because of the fact that your technical skills are there yet - it is a vicious cycle)
I have a very simple rule that I use. Just test the behavior of the things you will expose. If the behavior is tested then the most important step is done. How deep you go after that depends on a variety of factors
Yep, behavior is king... I've written the second part here:
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.