Що таке "заглушка"?


116

Отже, продовжуючи свою нову резолюцію, щоб більше ввійти в TDD, я зараз починаю більше працювати Rhino Mocks .

Мені дуже хочеться зробити одне, щоб переконатись, що я справді балакаю те, до чого я потрапляю, тому хотів перевірити своє розуміння того, що я бачив досі (і я подумав, що було б добре, щоб це було тут як ресурс).

Що таке "заглушка"?


6
спочатку ви ставите запитання, а потім даєте відповідь?
empi

17
Як зазначено в запитанні - я шукаю, щоб моє розуміння було правильним, я хотів, щоб відповідь була тут (чи моя, чи ні), щоб забезпечити ресурс на це запитання, яке часто задається, але дуже рідко відповідає: )
Роб Купер

42
Також відповіді на власне запитання вказані у FAQ, як правильний спосіб використання сайту - насправді це слід заохочувати.
Ерік Форбс

Чудово відповідати на власні запитання, хоча саме запитання має занадто багато шуму (автобіографія) і не виявляє зусиль для пошуку відповіді, не схильності до того, що людина зробила, щоб спробувати знайти відповідь.
eric

Відповіді:


112

Мартін Фаулер написав чудову статтю на цю тему. З цієї статті:

Meszaros використовує термін Test Double як загальний термін для будь-якого виду об'єкта, що використовується для випробування, який використовується замість реального об'єкта для цілей тестування. Назва походить від поняття трюк-подвійник у фільмах. (Однією з його цілей було уникнути використання будь-якого імені, яке вже широко використовувалося.) Месарос тоді визначив чотири конкретні види подвійних:

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

Якщо говорити це моїми власними словами: знущаються з об'єктів "очікують", що на них будуть викликані певні методи, і зазвичай вони викликають збій тесту, якщо їхні очікування не виправдані. Об'єкти заглушки надають консервовані відповіді (і можуть бути автоматично генеровані бібліотеками-помічниками), але, як правило, безпосередньо не призводять до того, що тест блоку не завершився. Зазвичай вони використовуються лише для того, щоб об'єкт, який ви тестуєте, отримував дані, необхідні для його роботи.


2
Тоді яка різниця між фальшивими предметами і сутичками? Як ви заявили, вони мають таку саму роль, яку потрібно реалізувати, чи не так?
ЛКМ

4
@LKM фальшивий об’єкт - це фактичний об'єкт, який реалізує реальну функціональність і робить речі. Заглушки - це лише "консервовані відповіді", наприклад. результати жорсткого кодування JSON, що імітують те, що буде повернуто з веб-сервера.
користувач3344977

31

"Заглушка" - це реалізація інтерфейсу, який існує для надання даних / відповіді. Наприклад:

  • набір даних
  • список користувачів
  • Xml-файл

Зазвичай це надається іншою службою (будь то Веб-служба, інша програма, база даних), але для того, щоб поліпшити перевірку коду, результати «підробити».

Основна перевага цього полягає в тому, що воно дозволяє робити твердження в одиничних тестах на основі очікуваних даних. Якщо помилки виникають через помилки даних, то можна легко додати тести, створити нову заглушку (копіюючи помилку даних) та код, створений для виправлення помилки.

Заглушки відрізняються від Mocks тим, що вони використовуються для представлення та перевірки стану об'єкта, тоді як Mock перевіряє його взаємодію .


дякую за вашу відповідь, але я все ще не розумію: "реалізація інтерфейсу" ??
BKSpurgeon

6

Я вважаю, що "заглушка" походить від STartUpBlock. він використовується для позначення частин коду, створених автоматично, щоб допомогти вам, розробнику, розпочати роботу.


1
Я не думаю, що це правильно. Це, мабуть, випливає з цієї практики в будівництві будинків: hunker.com/12000314/what-is-a-stub-out
mattdm

3

"Заглушка" або "метод заглушки" призначена для початкового коду або тимчасової заміни коду, який ще не розробляється. Це вбудований код, згенерований IDE. Заглушкові методи - це фактично методи, які використовуються для тестування методів певного класу. Він використовується, вводячи деякі значення для локальних змінних у ваші фактичні методи розробки та перевіряючи, чи правильний вихід. Важливо знаходити помилки у своєму коді.


Ця відповідь була б кращою, якщо пояснити більш детально: яка мета заглушки? як він використовується? чому це важливо?
Еван Вайсбург

Дякую! Я просто новачок у програмуванні та щойно почав дізнаватися про розробку програмного забезпечення. Поки це те, що я розумію щодо методів заглушки. Тож я не дуже впевнений, яке його призначення, значення та як воно використовується. Але я думаю, що методи заглушки - це фактично методи, які використовуються для тестування методів певного класу. Він використовується, вводячи деякі значення для локальних змінних у ваші фактичні методи розробки та перевіряючи, чи правильний вихід. Важливо знайти помилки у своїх кодах. Якщо у вас є щось ще додати або виправити, будь ласка, прокоментуйте. Я тільки зараз дізнаюся про тестування.
Нассер

1
Чудово, що ти вчишся! Ви повинні відредагувати оригінальну відповідь, щоб майбутні читачі могли з нею легко вчитися, а не публікувати в коментарях. Крім того - якщо ви не впевнені в чомусь, чому ви публікуєте авторитетну відповідь на це?
Еван Вайсбург

1
Це добре, якщо ви самостійно навчаєтесь - в StackOverflow вам не потрібно публікувати відповіді, якщо ви не впевнені в них. Це не стандартний форум. Дивіться: stackoverflow.com/tour
Еван Вайсбург

1
Дуже дякую за путівники та пропозиції. Дуже цінуй!
Насерр

3

Нещодавно я зіткнувся з питанням і визнав, що це порівняння між Стубом та драйвером є дійсно зрозумілим і корисним:

В основному, заглушки та драйвери - це підпрограми, які насправді нічого не роблять, окрім як заявляють про себе та параметри, які вони приймають. Решта коду може потім приймати ці параметри і використовувати їх як вхідні дані.

+ --------- + ------------------------------- + ------- ------------------------ +
| | Стуб | Водій |
+ --------- + ------------------------------- + ------- ------------------------ +
| Тип | Манекенні коди | Манекенні коди |
+ --------- + ------------------------------- + ------- ------------------------ +
| Використовується в | Інтеграція зверху вниз | Інтеграція знизу |
+ --------- + ------------------------------- + ------- ------------------------ +
| Призначення | Щоб дозволити тестування верхніх | Щоб дозволити тестування нижнього |
| | рівні коду, коли | рівні коду, коли |
| | нижчі рівні коду є | верхніми рівнями коду є |
| | ще не розроблений. | ще не розроблений. |
+ --------- + ------------------------------- + ------- ------------------------ +
| Приклад | А і В - компоненти. | А і В - компоненти. |
| | A ---> B | A ---> B |
| | | |
| | A розроблено. | Ще потрібно розробити
| | B ще потрібно розвивати B розроблено. |
| | Тому заглушка використовується | Тому драйвер використовується |
| | замість В наслідувати його. | замість A наслідувати його |
| | | |
| | A ---> Стуб | Водій ---> B |
+ --------- + ------------------------------- + ------- ------------------------ +

Від різниці між Стубом та драйвером


0

Після деяких досліджень і на основі файлів заглушки, з якими я стикався протягом свого життя кодера, я б сказав, що файл заглушки - це лише файл, який містить цілу або частину реалізації файлу. Це допомагає розробникам почати кодування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.