У вас є клас X, і ви пишете деякі одиничні тести, які підтверджують поведінку X1. Існує також клас A, який приймає X як залежність.
Коли ви пишете одиничні тести для A, ви знущаєтесь з X. Іншими словами, під час тестування одиниці A ви встановлюєте (постулюєте) поведінку макету X як X1. Час йде, люди користуються вашою системою, потребують змін, X розвивається: ви модифікуєте X, щоб показати поведінку X2. Очевидно, що одиничні тести для X не вдасться, і вам потрібно буде їх адаптувати.
Але що з А? Одиничні тести на A не пройдуть, коли поведінка X зміниться (через глузування з X). Як виявити, що результат A буде іншим, коли буде запущено "реальний" (модифікований) X?
Я очікую відповідей у рядку: "Це не мета одиничного тестування", але яке значення має одиничне тестування? Чи справді це лише говорить вам про те, що коли всі тести проходять, ви не внесли переломних змін? І коли поведінка класу змінюється (охоче чи небажання), як ви можете виявити (бажано, в автоматизованому вигляді) всі наслідки? Чи не слід більше зосереджуватися на інтеграційному тестуванні?
X1
ви говорите, що X
реалізує інтерфейс X1
. Якщо ви зміните інтерфейс X1
на X2
макет, який ви використовували в інших тестах, більше не слід збирати, отже, ви також змушені виправити ці тести. Зміни в поведінці класу не повинні мати значення. Насправді, ваш клас A
не повинен залежати від деталей реалізації (що саме ви змінили б у цьому випадку). Тож одиничні тести для роботи A
все ще правильні, і вони говорять про те, що A
працює в ідеальній реалізації інтерфейсу.