Я понимаю точку зрения, когда частные методы рассматриваются как детали реализации, и тогда не нужно тестировать. И я бы придерживался этого правила, если бы нам пришлось развиваться только за пределами объекта. Но мы, мы какие-то ограниченные разработчики, которые разрабатывают только вне объектов, вызывая только свои публичные методы? Или мы на самом деле также развиваем этот объект? Поскольку мы не обязаны программировать внешние объекты, нам, вероятно, придется вызывать эти частные методы в новые открытые методы, которые мы разрабатываем. Разве не было бы здорово узнать, что закрытый метод противостоит всем шансам?
Я знаю, что некоторые люди могут ответить, что если мы разрабатываем другой публичный метод для этого объекта, то этот должен быть протестирован и все (частный метод может продолжать жить без теста). Но это также верно для любых общедоступных методов объекта: при разработке веб-приложения все общедоступные методы объекта вызываются из методов контроллеров и, следовательно, могут рассматриваться как подробности реализации для контроллеров.
Так почему же мы тестируем объекты? Поскольку это действительно трудно, нельзя сказать невозможно, быть уверенным, что мы тестируем методы контроллеров с соответствующим вводом, который будет запускать все ветви базового кода. Другими словами, чем выше мы в стеке, тем сложнее проверить все поведение. И то же самое для частных методов.
Для меня граница между частными и публичными методами - это психологический критерий, когда дело доходит до тестов. Критерии, которые имеют для меня большее значение:
- метод вызывается более одного раза из разных мест?
- Является ли метод достаточно сложным, чтобы требовать испытаний?