У меня возникло подозрение, что TDD противоречит использованию паттернов.
TDD гласит что кода должно быть ровно столько, сколько необходимо для выполнения тестов, ни больше ни меньше.
Паттерны применяются для того, чтобы уменьшить трудозатрыты на адаптацию кода к изменившимся требованиям. Поэтому применение паттернов нарушает принцип ни больше, так как кроме кода необходимого и достаточного для выполнения тестов, появляется код, необходимый для адаптации кода к изменившимся требованиям. Естественно протестировать приспособленность кода к изменяющимся требованиям нельзя, поэтому получается, что не весь код, использующий паттерны, покрыт тестами.