TDD is great for testing code logic and small parts of an application. Most teams are pretty good at this.
However, what happens when your application logic depends on data? Maybe you have a reporting/analytics system or a complex CMS. Business logic varies with the shape of the data. Unit testing alone falls short. Integration and functional testing become more difficult and costly.
To solve this problem, we developed a multi-layer approach to testing our analytics application. We combined unit, integration, and functional tests with multiple test data sets to balance test coverage and maintenance costs.