logo

Mock срещу Stub срещу Spy

Подигравка

Mocks са обектите, които съхраняват извиквания на метод. Той се нарича динамични обвивки за зависимости, използвани в тестовете. Използва се за записване и проверка на взаимодействието между Java класовете. Макетът е известен като най-мощната и гъвкава версия на тестовите двойки. Ние използваме метод за подигравка се нарича макет() .

Основната функция на използването на подигравки е, че дава пълен контрол върху поведението на подиграваните обекти. Фалшивите обекти обикновено се използват за проверка на поведението . Терминът поведение означава проверка на правилните методи и пътища, които се прилагат към обектите.

mb до gb

Mocks се създават най-вече с помощта на библиотека или подигравателна рамка като Mockito, JMock и EasyMock. Използва се за тестване на голям набор от тестове, където мъничетата не са достатъчни. Една от основните функции на mock е, че можем да проверим колко пъти се извиква даден метод.

Следният кодов фрагмент показва как да използвате mock().

 ToDoService doService = mock(ToDoService.class); 

мъниче

Stubs са обектите, които съдържат предварително дефинирани данни и ги използват, за да дават отговори по време на тестове. С други думи, мъниче е обект, който прилича на реален обект с минималния брой методи, необходими за тест. Заготовките се използват, когато не искаме да използваме обекти, които биха дали отговор с реални данни. Мъничето се нарича най-леката, а най-статичната версия на теста се удвоява.

Основните функции на пръчките са:

sql ddl команди
  • Той винаги връща предварително дефинирания изход, независимо от входа.
  • Може да се използва за наподобяване на обектите на базата данни.
  • Заготовките се използват за намаляване на сложността, която възниква по време на създаването на реалните обекти. Използват се предимно за изпълнение държавна проверка .

Шпионин

Шпионите са известни като частично фалшиви обекти . Това означава, че шпионинът създава частичен обект или половин манекен на истинския обект, като затрива или шпионира истинските. При шпионирането истинският обект остава непроменен и ние просто шпионираме някои специфични методи за него. С други думи, ние вземаме съществуващия (реален) обект и замени или шпионин само някои от неговите методи.

Шпионите са полезни, когато имаме огромен клас, пълен с методи, и искаме да се подиграем на определени методи. В този сценарий трябва да предпочетем да използваме шпиони, а не подигравки и мъничета. Той извиква реалното поведение на метода, ако методите не са заглушени.

В Mockito методът spy() се използва за създаване на шпионски обекти. Това ни позволява да извикваме нормалните методи на реалния обект. Следният кодов фрагмент показва как да използвате метода spy().

 List spyArrayList = spy(ArrayList.class); 

Разлика между Stub и Mock

Параметри мъниче Подигравка
Източник на данни Източникът на данни на мъничетата е твърдо кодиран. Обикновено е тясно свързан с тестовия пакет. Данните за макетите се задават от тестовете.
Създадено от Записките обикновено са написани на ръка, а някои са генерирани от инструменти. Mocks обикновено се създават с помощта на библиотека на трета страна като Mockito, JMock и WireMock.
Използване Пънчетата се използват главно за прости пакети от тестове. Mocks се използват главно за големи тестови пакети.
Графичен потребителски интерфейс (GUI) Stubs нямат GUI. Mocks имат GUI.

Следват някои разлики между макет и шпионин:

Параметри Подигравка Шпионин
Използване Макетите се използват за създаване на напълно фалшиви или фиктивни обекти. Използва се главно в големи тестови пакети. Шпионите се използват за създаване на частични или полуфалшиви обекти. Подобно на макетите, шпионите също се използват в големи тестови пакети.
Поведение по подразбиране Когато използвате фалшиви обекти, поведението по подразбиране на методите (когато не са заглушени) е да не правят нищо (не изпълнява нищо.) Когато използвате шпионски обекти, поведението по подразбиране на методите (когато не са заглушени) е истинското поведение на метода.

В предишните ни уроци обсъдихме някои примери за забиване, подигравка и шпиониране. За да разберете по-добре разликата между забиване, подигравка и шпиониране, прегледайте примерите.