When practicing TDD, I create interfaces to abstract away the ugly stuff, like databases, file I/O, web service calls, email messages, and other external systems. I can run tests now that don't have to interact with real implementations of these external...