These days I lean more toward functional testing than unit testing, for UI development. Thankfully, app servers have become snappier so it's easier and more fun to record UI tests using something like Selenium, or write UI functional test code using its supported scripting system. I've even contributed code to some of the mocking frameworks previously, but nowadays I tend to keep them to minimum and use them only when absolutely necessary. Mocks are rather artificial and ugly. If you want to maintain the testing code, and hence do TDD as the project grows, then don't overuse mock objects.