One of the reasons for Test Driven Development is to design your code as it will be used. In my experience it has lent itself to some very elegant and maintainable code.
The greatest benefit that I see with unit tests is in maintenance. When I go and change some arbitrary method somewhere, and because I have unit tests running after source control check in, I will know right away if that code change just broke something unforeseen. That’s where I’ve seen unit tests save man hours in QA or new production bugs.