mockito tutorial mockito framework
Комплетан водич за Моцкито Фрамеворк: Практични Моцкито водичи
најбољи софтвер за сакривање ип адресе
Јединствено тестирање је једноставна, али ефикасна техника за стицање доброг нивоа поверења у код који се испоручује.
Штавише, избегава проблеме са регресијом код сваког дела кода који се пријави.
Са архитектуром микро-услуга (па чак и за једноставну структуру која укључује основне позиве базе података), једноставно јединствено тестирање није довољно. Оно што нам треба је исмевање зависности и тестирање стварне логике методе која се тестира.
Листа СВИХ Моцкито водича у овој серији:
Туториал # 1: Моцкито оквир за ругање у јединственом тестирању (Овај водич)
Туториал # 2: Стварање ругалица и шпијуна у Моцкито-у
Туториал # 3: Различите врсте подударања које пружа Моцкито
Туториал # 4: Ругање приватним, статичким и празним методама помоћу Моцкито-а
Водич бр. 5: 12 најпопуларнијих питања за Моцкито интервју
************************************************* * *******************
Преглед упутстава у овој Моцкито серији
Приручник # | Шта ћете научити |
---|---|
Туториал # 1: | Моцкито оквир за ругање у јединственом тестирању Научите се ругању са Моцкито - свеобухватним Моцкито водичем за почетнике са примерима кода. Научите Моцкинг Фрамеворк за ругање у јединственом тестирању. |
Туториал # 2: | Стварање ругалица и шпијуна у Моцкито-у Ругалице и шпијуни су врсте тестних двојника, које помажу у писању јединствених тестова. Оба су објашњена у овом водичу за Моцкито Спи са примерима кода. |
Туториал # 3: | Различите врсте подударања које пружа Моцкито Научите како да користите различите врсте подударања које нуди Моцкито. Подударања су попут џокер знакова где уместо одређеног улаза / излаза одредите опсег уноса. Аргумент и верификација су две врсте подударања у Моцкито-у које су овде детаљно објашњене. |
Туториал # 4: | Ругање приватним, статичким и празним методама помоћу Моцкито-а Научите ругање приватним, статичким и празним методама у Моцкито-у са примерима. Научите ругање приватним и статичким методама помоћу оквира за јединствено тестирање ПоверМоцкито. |
Водич бр. 5: | 12 најпопуларнијих питања за Моцкито интервју Моцкито интервју питања и одговори са примерима примера кода. Ово ће вам помоћи да успешно разбијете било који интервју са Моцкито Моцкинг Фрамеворк. |
Почнимо са првим упутством у овој серији !!
Шта ћете научити:
- Ругање у јединственом тестирању
- Врсте / категорије тест парова
- Различити подругљиви оквири
- Изворни код
- Закључак
- Препоручено читање
Ругање у јединственом тестирању
Моцкс / Стубс је термин који људи обично чују док посебно креирају јединствене тестове.
Дакле, шта је у основи ругање? Једноставно речено, није ништа друго него обезбеђивање контролисане инстанце или имплементације зависности од којих зависи код који се тестира како би се тестирала његова сржна логика.
Разлог због којег сам га споменуо као контролисану инстанцу је тај што се понашање зависности може програмирати или контролисати по жељи за методу или систем који се испитује.
Да бисмо га схематски објаснили, узмимо пример било које пословне или е-трговинске апликације. Скоро свака таква врста апликације првенствено има 3 слоја тј. Кориснички интерфејс, слој предузећа и слој приступа подацима (који разговара са основном складиштем података)
Позивајући се на горњи дијаграм, Бусинесс Лаиер има 3 зависности, наиме, ниво података и 2 друге услуге које су Сервице 1 и Сервице 2.
Гледајте овако - Апликација попут гоогле мапе може имати зависности од
- Стварне продавнице података као што је МиСКЛ или било која друга СКЛ база података која чува податке карте.
- Вањска услуга попут ЦоординатеСервице која пружа географске ширине и дужине локације.
- Спољна услуга попут саобраћајне услуге која пружа информације о саобраћају у реалном времену за дати пар координата.
Дакле, ако неко покушава да валидира основну пословну логику помоћу јединичног теста, све док и осим ако нема радне имплементације ових зависности, тестови не могу бити покренути.
У овим ситуацијама спасавање долази у помоћ, где без обзира на то да ли је ваша зависност активна или не ради, увек вам је загарантовано да водите своју пословну логику са програмираним одговором за зависност која се позива из кода који се тестира.
Врсте / категорије тест парова
Моцк је у суштини тип „Тест Доубле“ - то је технолошки жаргон. „Тест Доубле“ у основи значи објекат који је замењен еквивалентном стварном инстанцом објекта или зависношћу.
Постоје различите врсте тест парова као што је поменуто у наставку:
# 1) Фалсе:
Лаж је радна имплементација слична стварној зависности, осим чињенице да је локална за тестирани систем.
Пример: Уместо да погоди прави производни ДБ, тест користи једноставну колекцију / у меморији за чување података.
# 2) Стубс:
Стубс су унапред конфигурисани одговори када се из система који се испитује позове зависност.
# 3) Шпијуни:
Као што и само име говори, његова стварна функција (зависност) је позив са неким механизмом за посматрање. Пошаљите позив, може се проверити да ли је позив заиста покренут или не, заједно са параметрима.
# 4) Исмевања:
Изругивања су посебне инстанце објеката на којима се могу навести Стуббед / унапред конфигурисани одговори. Чињеница да је лажни позив позван може се потврдити као тврдња у тесту.
На пример:
Постоји функција генерирања извештаја која шаље е-пошту на одређену адресу током извршења.
Како не желимо да шаљемо стварну е-пошту, изнова и изнова, током тестирања, услуга ЕмаилСервице се исмева (а метод е-поште који шаље е-пошту конфигурисан је да не ради ништа када се позове). На крају теста, можемо само да потврдимо да је начин слања е-поште услуге е-поште позван преко исмеваног објекта.
Различити подругљиви оквири
Готово сви језици пружају различите врсте подсмешних оквира. Писаћемо пример кода користећи Моцкито који је отворени извор Моцкинг фрамеворк за Јаву.
Анатомија једноставног јединичног теста са исмеваном зависношћу. Претпоставимо да покушавамо да јединствено тестирамо апликацију која израчунава укупне оцене за ученика из свих предмета и записује је у ДБ.
public void calculateSumAndStore(String studentId, int() scores) { int total = 0; for (int score: scores) { total = total + score; } // write total to DB databaseImpl.updateScores(studentId, total); }
Сада, ако желимо да напишемо јединични тест за методу - ЦалцуСумАндСторе, онда можда нећемо имати стварну имплементацију базе података за чување укупног. У том случају никада нећемо моћи јединствено да тестирамо ову функцију.
Али са лажним представљањем, можемо једноставно проследити Моцк за услугу базе података и потврдити остатак логике
Узорак теста као што је приказано доле:
@Test public void calculateSumAndStore_withValidInput_shouldCalculateAndUpdateResultInDb() { // Arrange studentScores = new StudentScoreUpdates(mockDatabase); int() scores = { 60, 70, 90 }; Mockito.doNothing().when(mockDatabase).updateScores('student1', 220); // Act studentScores.calculateSumAndStore('student1', scores); // Assert Mockito.verify(mockDatabase, Mockito.times(1)).updateScores('student1', 220); }
Видели смо у горенаведеном тесту, обезбедили смо објекат моцкДатабасе родитељској класи (за методу која се тестира) и поставили смо ошамућени одговор за објекат моцкедДатабасе - линија # 6 горе (Моцкито.доНотхинг (). Вхен (моцкДатабасе) .упдатеСцорес („студент1“, 220);)
Важне напомене које треба напоменути из горе наведеног су:
# 1) Изруговани објекат треба да постави нејасне одговоре за све методе које ће бити позване током извршавања функције.
#два) Параметри наведени током стварања шкрбине могу бити специфични или генерички.
Пример у горе наведеном случају - параметре за методу упдатеСцорес одредили смо као „студент1“ и 220, јер знамо да су то тачни улази помоћу којих ће наша метода бити позвана.
# 3) Током верификације проверавамо следеће:
- Позвана је метода моцкДатабасе.упдатеСцорес.
- Аргументи су били „студент1“, односно 220.
- Метода упдатеСцорес позвана је 1 пут.
Покушајмо сада мало да променимо овај тест код и да видимо шта ће се догодити:
Промијенићу аргумент у лажном подешавању из „студент1“ у било којиСтринг (Моцкито нуди стандардно подударање са именом аниСтринг ()) и 220 у било којиИнтегер (Моцкито нуди стандардни подударник под именом аниИнт () и подудара се са било којом цијелом вриједношћу)
@Test public void calculateSumAndStore_withValidInput_shouldCalculateAndUpdateResultInDb() { // Arrange studentScores = new StudentScoreUpdates(mockDatabase); int() scores = { 60, 70, 90 }; Mockito.doNothing().when(mockDatabase).updateScores(anyString(), anyInt()); // Act studentScores.calculateSumAndStore('student1', scores); // Assert Mockito.verify(mockDatabase, Mockito.times(1)).updateScores('student1', 220); }
Покушајте поново да покренете тест и тест би и даље требало да буде зелене боје.
(Покушајмо сада да променимо верификацију / тврдње и променимо било који од аргумената.
Променимо 220 на 230. Сада се очекује да тест не успе, јер ово није очекивани аргумент са којим је базаУпдате сигурно позвана.
@Test public void calculateSumAndStore_withValidInput_shouldCalculateAndUpdateResultInDb() { // Arrange studentScores = new StudentScoreUpdates(mockDatabase); int() scores = { 60, 70, 90 }; Mockito.doNothing().when(mockDatabase).updateScores(anyString(), anyInt()); // Act studentScores.calculateSumAndStore('student1', scores); // Assert Mockito.verify(mockDatabase, Mockito.times(1)).updateScores('student1', 230); }
Након покретања теста, погледајте евиденције грешака као што је приказано доле (јасно се помиње да се стварни аргументи нису подударали са очекиваним).
Аргументи се разликују! Желео:
моцкДатабасе.упдатеСцорес („студент1“, 230);
-> на цом.моцкинг.самплеМоцкс.СтудентСцореУпдатесУнитТестс.цалцулатеСумАндСторе_витхВалидИнпут_схоулдЦалцулатеАндУпдатеРесултИнДб (СтудентСцореУпдатесУнитТестс.јава:37)
Стварно позивање има различите аргументе:
моцкДатабасе.упдатеСцорес („студент1“, 220);
Изворни код
Интерфејс - ИДатабасе.јава
public interface IDatabase { public void updateScores(String studentId, int total); }
Предмет у току - СтудентСцореУпдатес.јава
public class StudentScoreUpdates { public IDatabase databaseImpl; public StudentScoreUpdates(IDatabase databaseImpl) { this.databaseImpl = databaseImpl; } public void calculateSumAndStore(String studentId, int() scores) { int total = 0; for(int score : scores) { total = total + score; } // write total to DB databaseImpl.updateScores(studentId, total); } }
Разред јединичних тестова - СтудентСцореУпдатесУнитТестс.јава
public class StudentScoreUpdatesUnitTests { @Mock public IDatabase mockDatabase; public StudentScoreUpdates studentScores; @BeforeEach public void beforeEach() { MockitoAnnotations.initMocks(this); } @Test public void calculateSumAndStore_withValidInput_shouldCalculateAndUpdateResultInDb() { // Arrange studentScores = new StudentScoreUpdates(mockDatabase); int() scores = {60,70,90}; Mockito.doNothing().when(mockDatabase).updateScores(anyString(), anyInt()); // Act studentScores.calculateSumAndStore('student1', scores); // Assert Mockito.verify(mockDatabase, Mockito.times(1)).updateScores('student1', 230); } }
Закључак
Оно што смо до сада видели је врло основни и директан пример Моцк подешавања помоћу Јава-овог Моцкито оквира.
За скоро 60-70% јединичних тестова који укључују лажне тестове, тестови би требало да имају сличну структуру. Моцкито пружа пуно напредне конфигурације / подршке за опсежне потребе ругања, убризгавањем лажних примерака помоћу убризгавања зависности, пружа шпијунима да заправо шпијунирају прави позив методе и верификују позиве.
Наш предстојећи водич ће објаснити више о концепту ругалица и шпијуна у Моцкиту.
Препоручено читање
- 12 најпопуларнијих питања о Моцкито интервјуу (Моцкинг Фрамеворк Интервиев)
- Дубински водичи за помрачење за почетнике
- Како поставити Ноде.јс оквир за тестирање: Водич за Ноде.јс
- Писање јединствених тестова са Споцк Фрамеворк-ом
- Разлике између јединственог тестирања, интеграционог тестирања и функционалног тестирања
- Најбољи алати за тестирање софтвера 2021. године (КА Тест Аутоматион Тоолс)
- Водич за испитивање разарања и испитивања без разарања
- Функционално тестирање вс нефункционално тестирање