Я никогда не писал TDD-код, но я видел приличную дискуссию об этом здесь, на SO. Моя самая большая забота об этом заключается в том, что, похоже, общий дизайн API (для гибкости, простоты использования, простоты интерфейса и производительности) иногда занимает заднее место, чтобы сделать код макетным, ультра-модульным, помимо того, что необходимо для любого использования API case и т.д. Например, сторонники TDD часто предлагают, чтобы вещи передавались в качестве параметров, которые с точки зрения абстракции API вызываемый метод должен "просто знать" или что классы и методы будут учитываться таким образом, чтобы упростить тестирование, что не всегда является способом, который наилучшим образом относится к проблемной области.
Для людей, более опытных как с дизайном TDD, так и с API: вы обнаружите, что TDD часто мешает хорошему дизайну API? Если да, то как вы справляетесь с этим?