Test double
Дублери (англ. Test double) — спеціалізовані методи чи об'єкти, які використовуються при тестуванні систем, в яких виникає необхідність взаємодії з зовнішніми об'єктами, наприклад: бази даних, файлова система, мережеве з'єднання та тощо. При цьому дублер повинен реалізувати інтерфейс зовнішнього об'єкту та відповідати всім вимогам, які висуваються до реального об'єкта.
Використання дублерів доцільно в наступних випадках:
- Низька швидкість роботи з зовнішнім об'єктом;
- Необхідність запуску тестів незалежно від оточення та можливостей машини розробника;
- Необхідність роботи з реальними та чутливими до змін об'єктами;
- Складність перевірки коректності взаємодії між частинами;
- Та інші випадки, в яких виникає необхідність перевірки стану зовнішнього об'єкту, де це досить складно зробити з зовнішнього коду.
Згідно з Gerard Meszaros [Архівовано 15 лютого 2015 у Wayback Machine.] виділяються наступні типи Test Double:
- Dummy;
- Fake;
- Stubs;
- Mock;
- Spy.
Dummy — це об'єкти, які передаються у метод, але насправді не використовуються, не проводяться ніякі зміни, не має поведінки, ніякі методи не викликаються. В загальному випадку це параметри методів (звісно, якщо вони не впливають на те що перевіряється). Це об'єкт, який необхідний для того щоб тест пройшов. Іноді це просто NULL, new object().
Fake — це об'єкти, які мають внутрішню реалізацію, але зазвичай вона сильно урізана та їх не можна бути використана в кінцевому коді. Найяскравішим прикладом, де можуть використовуватися Fake, є бази даних.
Stubs (заглушка) — забезпечує жорстко визначену відповідь під час тестування. Використовуються для заміни об'єктів, які забезпечують SUT (system under testing) вхідними даними. При цьому ігноруються всі дані які можуть поступати з тестованого об'єкту.
Spy (тестовий шпигун) — використовується для тестів взаємодії, головною функцією є запис даних та виклики, що виникають в тестованому об'єкті для подальшої перевірки коректності виклику залежного об'єкту. Дозволяє перевірити логіку саме об'єкту, що тестується, без перевірки залежних об'єктів.
Mock — дуже схожий на тестового шпигуна, однак не записує послідовність викликів з переданими параметрами для подальшої перевірки, а може сам генерувати виключення, тобто mock може перевірити коректність поведінки об'єкту.
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.]
На цю статтю не посилаються інші статті Вікіпедії. Будь ласка розставте посилання відповідно до прийнятих рекомендацій. |