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