С тех пор, как я стал больше разбираться в DI и TDD, я все реже использовал частные методы, но причина была не в том, что мне нужно было, чтобы они были публичными для тестов.Это связано с тем, что в качестве побочного продукта использования DI я узнаю больше о применении принципов SOLID к моему коду, и это (в свою очередь) побуждает меня писать классы с меньшим количеством методов в целом и почти без личных.
Итак, допустим, у вас есть фрагмент кода, который вы используете в различных методах вашего класса.Вы знаете о СУХОЙ и реорганизуете ее в частный метод, и все хорошо.За исключением того, что часто вы понимаете, что можете обобщить то, что делает этот закрытый метод, и внедрить эту функциональность как внешнюю зависимость класса: таким образом, вы можете протестировать и смоделировать это, конечно, но, прежде всего, вы можете повторно использовать то, что этот метод делает даже вдругие классы или другие проекты, если это необходимо.Удаление его из исходного класса является применением принципа единой ответственности.
Как я уже сказал, это изменение в способе кодирования напрямую не зависит от того факта, что я использую TDD или DI, но это побочный эффектПродукт принципов TDD побуждает меня применять и удобство, которое обеспечивают контейнеры DI при составлении множества небольших классов, являющихся результатом этого подхода.
РЕДАКТИРОВАТЬ: Второй подход в примере, который вы добавили к своему вопросу, является хорошим примером того, о чем я говорил.Тот факт, что ваш новый класс WordProcessor теперь можно тестировать, является плюсом, но тот факт, что он теперь можно комбинировать и многократно использовать, является реальным преимуществом.