Тестирование закрытых методов класса. Идеологическая война.

oh_really

Вопрос тестирования закрытых методов классов является часто обсуждаемым . Натыкаясь на мнения вроде вот этого мне очень тяжело удержаться от того, чтобы не возразить подобным ораторам на их доводы.

Тестирование только открытых методов приводит к тому, что код обрастает сложными функциональными тестами. В лучшем случае в таких тестах используется большое количество mock-объектов, в худшем — используются внешние сервисы (БД и т.д.). К примеру использование реальной БД при тестировании неизбежно влечет за собой необходимость использования достаточно сложного инструментария для добавления/удаления фикстур. Писать подобные функциональные тесты дольше и сложнее простых модульных тестов.

В том же обсуждении на stackoverflow есть отличный ответ:

10-17-2013 3-12-56 PM

Вопрос тестирования закрытых методов классов становиться еще более актуальным, если Вам предстоит разработка библиотеки или фреймверка. В этом случае большая часть кода будет находиться именно в закрытых методах и внутренних классах.

Но не стоит вдаваться и в другую крайность — если большинство  ваших тестов проверяют  закрытые методы классов, то скорее всего с дизайном ваших классов что-то не так. Возможно имеет смысл разбить классы на несколько. Задумайтесь о проведении рефакторинга.

Тестируйте всё, что должно работать правильно!