Во-первых, важно понимать, что попытки сохранить комплекты юнит-тестов полностью независимыми от деталей реализации могут привести к неэффективным комплектам тестов, т. Е. Комплектам тестов, которые не подходят для поиска всех найденных ошибок. И поиск ошибок - это одна основная цель тестирования (см. Майерс, Бадгетт, Сандлер: искусство тестирования программного обеспечения или «Бейзер: методы тестирования программного обеспечения» и многие другие).
Альтернативные реализации одного и того же интерфейса имеют разные потенциальные ошибки. Тесты для итеративной / рекурсивной реализации функции Фибоначчи будут выглядеть иначе, чем для реализации, использующей выражение закрытой формы из Moivre / Binet, или для реализации из таблицы поиска.
Однако существуют также вторичные цели юнит-тестирования. Один из них заключается в том, чтобы избежать ненужных сбоев ваших тестов при изменении деталей реализации. Поэтому тест не должен излишне зависеть от деталей реализации. Всегда пытайтесь сначала создать полезные тесты, которые не зависят от реализации, а затем добавьте тесты, которые зависят от реализации. В последнем случае тестирование внутренних (частных) методов (например, делая их видимыми в пакете) также может быть допустимым вариантом - при условии, что вы знаете о недостатках (обслуживание кода тестирования потребуется, если внутренние методы переименованы, удалены и т. Д.). .) и сравните их с преимуществами.
Во-вторых, очень вероятно, что вы не должны насмехаться над закрытыми методами, а просто использовать их как часть своих тестов. Я говорю очень вероятно, потому что это зависит от методов. Насмешка должна быть сделана по причине (и избежать иначе). Веские причины:
- Вы не можете легко заставить зависимый компонент (DOC) вести себя так, как предназначено для ваших тестов.
- Вызывает ли вызов DOC какое-либо недерминистское поведение (дата / время, случайность, сетевые подключения)?
- Тестовая настройка слишком сложна и / или требует интенсивного обслуживания (например, необходимость во внешних файлах)
- Исходный DOC создает проблемы переносимости для вашего тестового кода.
- Вызывает ли использование оригинального DOC неприемлемо длительное время сборки / выполнения?
- Имеют ли проблемы со стабильностью (зрелостью) DOC, которые делают тесты ненадежными, или, что еще хуже, DOC еще не доступен?
Например, вы (обычно) не высмеиваете стандартные библиотечные математические функции, такие как sin или cos, потому что у них нет ни одной из вышеупомянутых проблем. Вам нужно будет оценить, применимо ли это к вашим личным методам.