Дублери (англ. Test double) — спеціалізовані методи чи об'єкти, які використовуються при тестуванні систем, в яких виникає необхідність взаємодії з зовнішніми об'єктами, наприклад: бази даних, файлова система, мережеве з'єднання та тощо. При цьому дублер повинен реалізувати інтерфейс зовнішнього об'єкту та відповідати всім вимогам, які висуваються до реального об'єкта.
Випадки використання дублерів
Використання дублерів доцільно в наступних випадках:
- Низька швидкість роботи з зовнішнім об'єктом;
- Необхідність запуску тестів незалежно від оточення та можливостей машини розробника;
- Необхідність роботи з реальними та чутливими до змін об'єктами;
- Складність перевірки коректності взаємодії між частинами;
- Та інші випадки, в яких виникає необхідність перевірки стану зовнішнього об'єкту, де це досить складно зробити з зовнішнього коду.
Згідно з Gerard Meszaros [Архівовано 15 лютого 2015 у Wayback Machine.] виділяються наступні типи Test Double:
- Dummy;
- Fake;
- Stubs;
- Mock;
- Spy.
Dummy
Dummy — це об'єкти, які передаються у метод, але насправді не використовуються, не проводяться ніякі зміни, не має поведінки, ніякі методи не викликаються. В загальному випадку це параметри методів (звісно, якщо вони не впливають на те що перевіряється). Це об'єкт, який необхідний для того щоб тест пройшов. Іноді це просто NULL, new object().
Fake
Fake — це об'єкти, які мають внутрішню реалізацію, але зазвичай вона сильно урізана та їх не можна бути використана в кінцевому коді. Найяскравішим прикладом, де можуть використовуватися Fake, є бази даних.
Stubs
Stubs (заглушка) — забезпечує жорстко визначену відповідь під час тестування. Використовуються для заміни об'єктів, які забезпечують SUT (system under testing) вхідними даними. При цьому ігноруються всі дані які можуть поступати з тестованого об'єкту.
Spy
Spy (тестовий шпигун) — використовується для тестів взаємодії, головною функцією є запис даних та виклики, що виникають в тестованому об'єкті для подальшої перевірки коректності виклику залежного об'єкту. Дозволяє перевірити логіку саме об'єкту, що тестується, без перевірки залежних об'єктів.
Mock
Mock — дуже схожий на тестового шпигуна, однак не записує послідовність викликів з переданими параметрами для подальшої перевірки, а може сам генерувати виключення, тобто mock може перевірити коректність поведінки об'єкту.
«The Art of Unit Testing»
Roy Osherove в книзі «The Art of Unit Testing» пропонує спростити дану класифікацію та залишити всього три типи тестових об'єктів — Fakes, Stubs и Mocks. При умові, що Fake може бути як stub-ом, так і mock-ом, а тестовий шпигун стає mock-ом.
Джерела та література
- xUnitPetterns [Архівовано 15 лютого 2015 у Wayback Machine.]
- Dummy vs. Stub vs. Spy vs. Fake vs. Mock [Архівовано 23 грудня 2014 у Wayback Machine.]
- «The art of unit testing» [Архівовано 14 листопада 2020 у Wayback Machine.]
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до прийнятих рекомендацій. |