En mi opinion, el TDD en POO ayuda mucho a una correcta segregación de interfaces, ya que te empuja a describir los contratos de las clases con la que interactúas desde el propio test, lo cual te empuja a organizar bien las responsabilidades de las dependencias funcionales y, al final, la arquitectura que acabas haciendo tiene mucho que ver con el lenguaje del negocio y muy poco con las deciones técnicas de antemano.
Si trabajas con POO y arquitecturas en las que existen objetos del dominio, el TDD pasa a tener muchímimo sentido.
dicho de otro modo, cuando me he visto usando TDD de forma más regular, puedo ver claramente como es mucho menos frecuente extraer las interfaces de las clases ya implementadas, y mucho más frecuente implementar interfaces que suplen necesidades de clases ya existentes. Puede parecer una chorrada pero al final, estás en el ABC de arquitecturas como Ports & Adapters sólamente por el hecho de centrarte en lo importante (el negocio).
En fin, poco filosófico, pero de verdad es la conclusión a la que humildemente voy llegando a base de pelearme con este tema últimamente.