I am troubled by the word belief, not just in the title, but in the comments here. Unit tests should not be doctrine, there is a time and a place. And, I feel that more often than not they are warranted.<p>We can argue about what granularity they should be, talk about functional programming, debate whether they should hit the database or not, but IMO all of those things miss the point. For me, in order of priority, unit tests provide the following benefits:<p>1) Make me write better, more decoupled code<p>2) Serve as documentation as to the intent of the code, and provide some expected use cases<p>3) Validate the code works as expected, (especially when "refactoring", which is basically how I write all my code even from the start)<p>4) Help you when deleting code by exposing unexpected dependencies<p>You can argue against all of those points, and I often will, myself. It depends on the scale, importance, and lifetime of the project as to whether I will write unit tests. But, as soon as I think someone else will work on the code, I will almost always provide unit tests. In that scenario, they:<p>- Provide a way to quickly validate setup and installation was correct and the application functions<p>- Signal that the code was "curated" in some way. Someone cared enough to setup the test environment and write some tests, and that gives me a certain comfort in proceeding to work on the code.<p>- Provide a gateway into understanding why the application exists, and what some of the implementation details are.<p>So, thinking about the advantages I've outlined above, for me it would be very hard to say I don't "believe" in unit tests. I just don't always use them.