My SoftSource compatriot Leo makes some good points about the overuse, or at least overreliance on unit testing. I absolutely agree that you have to be clear about what the point of unit testing is. Unit testing is for exercising all the possible paths through any given code, and verifying that it does what the author of that code thought that it should do. That doesn't mean that it does what it is supposed to do in the context of a larger application. That's why we have integration or functional tests. It's up to whoever writes your functional tests (hopefully professional testers with specs in hand) to verify that the code does what the user wants it to do. Integration tests will tell you if your code does what the developer in the cube next to you thinks it should.

It's all about context. It is folly to think that running a bunch of unit tests guarantees that the application will do what it should. In fact, I'm working on a web project right now, and it is entirely possible for every unit test to pass with raging success and still not have the ASP.NET application start up. That's a pretty clear case of the application not even running, even though all the tests pass. The tests are still useful for what they provide, but there's a lot more to even automated testing than just validating that the code does what the author intended.