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