смысле описывают контракт согласно которому должен работать модуль. Если вы начинаете описывать как должны себя вести приватные методы - вы не описываете требования конкретного этого модуля, а прибиваете гвоздями специфику реализации, которой может не стать после очередного рефакторинга и тесты придется переписывать, получается оверспецификация потому что требуется то что не должно требоваться. А пока этот контракт описывает необходимый минимум можно реализацию менять как угодно не испытывая боли по поддержке тестов.
Было бы интересно узнать в каких ситуациях было бы уместно объявлять методы с default доступом для тестов, учитывая что у нас есть возможность рефакторинга и код приватных методов достаточно сложный что потребовал отдельных тестов на них?
По моему опыту юнит тесты так и так прибиты к реализации. Особенно, когда все зависимости заменены на моки. Если говорить о более модульных тестах (тестирование компонент, интеграционные тесты, функциональные тесты), то там да - завязываться на реализацию нельзя. Нужно тестировать в black box стиле. Но тут уже вопрос о глубине тестирования и что именно тестируется.
Обсуждают сегодня