If I develop something without a user interface, I always use TDD these days. In the end, you need to test the software. You can either do extra work, or do TDD, or do extra work and combine the user client for testing only. The first tests are more complete and more repeatable.
Running TDD with user interface code, on the other hand, didn't really really matter much to me. For various business reasons, I am limited to Visual Studio out of the box for my work, and “recording” tests with VS is a huge time, especially when you have to rewrite them if you change the user interface. I am doing TDD for business user interface logic, but not the user interface itself.
source share