Деякий час тому я прочитав відповідь на переповнення стека, яку не можу знайти, пропозицію, в якій пояснювалося, що ви повинні перевірити загальнодоступні API, і автор сказав, що ви повинні перевірити інтерфейси. Автор також пояснив, що якщо реалізація методу зміниться, вам не потрібно буде змінювати тестовий випадок, оскільки це порушить контракт, який переконається, що система під тестом працює. Іншими словами, тест повинен бути невдалим, якщо метод не працює, але не тому, що реалізація змінилася.
Це звернуло мою увагу, коли ми говоримо про глузування. Оскільки знущання в значній мірі покладається на виклики очікування з боку системи, що знаходиться в залежності від тесту, макети тісно поєднані з реалізацією, а не інтерфейсом.
Під час дослідження макету проти заглушки , кілька статей сходяться на думці, що заглушки слід використовувати замість макетів , оскільки вони не покладаються на очікування залежностей, тобто тест не потребує знання базової системи, що знаходиться в процесі впровадження тесту.
Мої запитання:
- Чи макети порушують принцип відкритого / закритого типу?
- Щось не вистачає в аргументі на користь заглушок в останньому абзаці, які роблять заглушки не такими великими проти макетів?
- Якщо так, коли було б корисним випадком використання глузування та коли було б корисним випадком використання заглушок?
Since mocking relays heavily on expectation calls from system under test's dependencies...
Я думаю, що саме тут ти йдеш не так. Макет - це якесь штучне зображення зовнішньої системи. Він ні в якому разі не представляє зовнішню систему, за винятком випадків, коли вона імітує зовнішню систему таким чином, що дозволяє проводити тести проти коду, що має залежність від зазначеної зовнішньої системи. Вам все одно знадобляться інтеграційні тести, щоб довести, що ваш код працює з реальною, незамкненою системою.