Test double

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Дублери (англ. Test double) — спеціалізовані методи чи об'єкти, які використовуються при тестуванні систем, в яких виникає необхідність взаємодії з зовнішніми об'єктами, наприклад: бази даних, файлова система, мережеве з'єднання та тощо. При цьому дублер повинен реалізувати інтерфейс зовнішнього об'єкту та відповідати всім вимогам, які висуваються до реального об'єкта.

Випадки використання дублерів[ред. | ред. код]

Використання дублерів доцільно в наступних випадках:

  1. Низька швидкість роботи з зовнішнім об'єктом;
  2. Необхідність запуску тестів незалежно від оточення та можливостей машини розробника;
  3. Необхідність роботи з реальними та чутливими до змін об'єктами;
  4. Складність перевірки коректності взаємодії між частинами;
  5. Та інші випадки, в яких виникає необхідність перевірки стану зовнішнього об'єкту, де це досить складно зробити з зовнішнього коду.

Згідно з 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-ом.

Джерела та література[ред. | ред. код]