top 12 mockito interview questions
Најчешће постављана питања из Моцкито интервјуа како бисте разбили моцкито подругљиви интервју:
У претходном упутству смо научили Приватне, статичке и празнине методе ругања . Прочитајте комплетне лекције за обуку о Моцкито-у ради јасног разумевања Моцкито оквира.
Овај чланак покрива најчешће постављана типична питања за интервјуе у оквиру Моцкито Моцкинг.
Очекује се да ће сваки програмер или КА знати основе ругања како би са лакоћом написао највише тестова (или јединичних тестова) и исмевао зависности ради побољшаног покривања кода и већег поверења у апликацију.
Најпопуларнија питања у вези са Моцкито интервјуом са детаљним одговорима
У наставку су наведена најчешће постављана питања о Моцкинг Фрамеворкс.
П # 1) Зашто нам је потребно ругање?
Одговор: Постоји много случајева коришћења исмевања који помажу у јединственом тестирању изолованог кода и чине тест веома поновљивим и предвидљивим.
Изругивање је обично потребно када:
до) Компонента која се тестира има зависности које још нису примењене или је примена у току.
Добар пример може бити крајња тачка РЕСТ АПИ-а која ће бити доступна касније у одређеном тренутку, али сте је потрошили у коду путем зависности.
Сад док стварна имплементација још увек није доступна, заиста већину времена знате какав је очекивани одговор тог АПИ-ја. Изругивање вам омогућава да тестирате такве врсте интеграције.
б) Компонента ажурира стање у систему.
Пример: ДБ позиви - не бисте желели да ажурирате свој ДБ подацима који су само за потребе тестирања. То би могло довести до оштећења података, штавише, доступност ДБ-а је још један изазов када се тест извршава.
Тако да би се избегло такво понашање, ДБ позиви би се могли исмејати у компоненти која се тестира. Отуда не постоји директно повезивање ДБ-а и компоненте која се испитује.
П # 2) Разлика између доРетурн и тхенРетурн.
Одговор: Моцкито нуди две различите синтаксе за стварање квара као што су:
- доРетурн, а затимРетурн
- не радите ништа (не тада ништа)
- доТхров, а затимТхров
Обе ове методе постављају клинове и могу се користити за стварање / постављање квара и понекад се могу користити наизменично.
најбоља музика мп3 довнлоадер за андроид
Па како се оба ова разликују?
до) Тадашњи Повратак начин набијања је безбедан начин постављања ометача. Шта ово у суштини значи је да врши проверу времена компајлирања у односу на типове повратка које желите и да оштетите.
Да разумемо ово на примеру:
Претпоставимо методу гетИтемДетаилс на моцкедИтемСервице који враћа објекат типа ИтемСку. Тако и са тхенРетурн, нећете моћи да вратите ништа осим типа ИтемСку, али са доРетурн можете да подесите клип да враћа било шта и тест неће успети (или избацити изузетак) током извршавања.
// Извођење радова
when (mockedItemService.getItemDetails(123)).thenReturn(new ItemSku());
// баца изузетак времена компајлирања
when (mockedItemService.getItemDetails(123)).thenReturn(expectedPrice);
// са доРетурн, оба подешавања клина функционишу јер нису сигурна за компајлирање.
// овде покушавамо да вратимо објекат типа доубле који и даље ради и не даје упозорење о времену компајлирања.
doReturn (expectedPrice).when(mockedItemService.getItemDetails(123)); doReturn (new ItemSku()).when(mockedItemService.getItemDetails(123));
б) Још једна важна разлика између ова два начина пребацивања је за исмејане објекте, осим сигурности при компајлирању нема велике разлике.
Међутим, за шпијуниране објекте поставка врсте 'тхенРетурн' неће радити, јер ће резултирати позивањем стварне методе пре него што се заврнути одговор врати као позив и то не на Моцк, већ на Спи који омотава стварну инстанцу објекта .
Па претпоставимо, постоји шпијун по имену спиедОбјецт и има метод тестМетход који враћа цео број, а затим ћете за постављање квара на овом месту морати користити доРетурн уместо тхенРетурн.
doReturn (10).when(spiedObject.testMethod());
П # 3) Када и зашто треба користити шпијуна?
Одговор: Шпијун је врста делимичног ругања које подржава Моцкито.
Ово у суштини значи врста примера где:
до) Када ниједна лажна слика није постављена, свака интеракција са шпијуном резултира позивањем правих метода. Али вам и даље омогућава да верификујете интеракције са шпијунираним објектом попут - да ли је метода заправо позвана, колико је пута метода позвана, који су аргументи коришћени који је метод позван итд.
б) Даје вам флексибилност да поставите делимичне подсмехе.
На пример, ако имате објекат са 2 методе - метода1 и метода2 и желите да метода1 буде позвана, а метода2 исмејана. Шпијуни пружају овакву врсту подешавања.
Дакле, разлика између моцк-а и стуб-а у једноставним терминима је - моцк је створен од типа, а не од инстанце, док стуб обавија стварну инстанцу објекта класе.
П # 4) Зашто се статичне методе не могу исмејати помоћу Моцкито-а?
недефинисана референца на функцију ц ++
Одговор: Статичке методе су повезане са самом класом, а не са неком одређеном инстанцом класе. То значи да све инстанце / објекти класе користе исту инстанцу статичке методе.
Статичке методе су више попут процедуралног кода и углавном се користе у наслеђеним системима уопште.
Лажне библиотеке обично креирају лажне израде динамичким стварањем инстанце током извођења, било путем интерфејса или наслеђивањем, а како статички метод није повезан ни са једном одређеном инстанцом, није могуће да се ругање оквира (попут моцкито, еаси моцк, итд.) Руга статичким методама.
Оквири попут ПоверМоцк-а који имају подршку за статичке методе изводе манипулацију бајт кодом током извршавања како би се ругали статичким методама.
П # 5) Која је потреба да се верификује да је лажни позив позван?
Одговор: Постављање клизача на исмејани објекат (или шпијуниране инстанце) не гарантује да ли је клизно подешавање уопште позвано.
„Верификационе“ подударности, пружити могућност да се потврди да ли је стварно покренут клин који је постављен или не, колико је пута упућен позив, са којим аргументима је позван стуббед метод итд.
У основи, омогућава нам да на робуснији начин потврдимо поставке теста и очекивани исход.
П # 6) Шта је добар тест код?
Одговор:
Неколико тачака о коду који се може тестирати (што значи да се лако може тестирати јединицом) укључује:
- Смањен број зависности или чврсто спајање - Пример: Зависности треба убризгати, а не директно их инсталирати.
- Код који се придржава СРП-а (принцип јединствене одговорности) - То у суштини значи да класа не би требало да има више разлога за промену. Придржавање СРП-а избегава стварање класа о себи и одржава код кохезивним и чистим.
- Мање / минимално коришћење статичких метода и завршних часова - Они углавном указују на мирисе кода и углавном су били повезани са застарелим кодом.
П # 7) Која су ограничења Моцкита?
Одговор: Моцкито је оквир избора за већину Јава пројеката. Лако га је применити, прочитати и разумети.
Неки од недостатака или ограничења у погледу функционалности су:
- Његова неспособност да се руга статичким методама.
- Конструктори, приватне методе и завршни часови не могу се исмевати.
П # 8) Који оквири могу подржати ругање приватним и статичким методама?
Одговор: Оквири попут ПоверМоцкито (проширења Моцкито оквира), ЈМоцкит итд. Пружају средства за ругање приватним и статичким методама.
П # 9) Ругање / заустављање задатих метода у Интерфејсу у Јави 8.
Одговор: Захваљујући имплементацији Јава 8 задатих метода у интерфејсу, Моцкито нуди готову подршку за исмевање таквих подразумеваних метода. (Имајте на уму да је ова подршка уведена од Моцкито 2 надаље).
Овим методама се може ругати / прљати као и било којим другим методама класе или интерфејса.
П # 10) Како се у Моцкито-у може верификовати редослед призива квара?
Одговор: Када желите да верификујете редослед којим су позвани лажни прикази, Моцкито-ов „ У реду ”Интерфејс се може користити.
Током теста, једноставно морате да подесите / направите Инордер објекат, наводећи списак лажних објеката на којима треба утврдити редослед лажних (ако постоји више метода на истом лажном и нема другог лажног који треба да би се верификовали онда је довољно само једном споменути изругивани разред).
Размотрите тест дат у наставку који дефинише објекат ИнОрдер и помиње 2 појаве моцкДатабасеИмпл
@Test public void calculateSumAndStore_withValidInput_verifyMockOrder() { // Arrange studentScores = new StudentScoreUpdates(mockDatabaseImpl); int[] scores = {60,70,90}; Mockito.doNothing().when(mockDatabaseImpl).updateScores(anyString(), anyInt()); Mockito.doReturn('A').when(mockDatabaseImpl).getGrade(anyInt()); InOrder inorder = inOrder(mockDatabaseImpl); // Act studentScores.calculateSumAndStore('Student1', scores); // Assert inorder.verify(mockDatabaseImpl).updateScores(anyString(),anyInt()); inorder.verify(mockDatabaseImpl).getGrade(anyInt()); }
Такође, за референцу, навођење кода методе која се испитује биће корисно за разумевање редоследа извођења теста:
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); databaseImpl.getGrade(total); }
Као што се види горе, датабасеИмпл прво позива упдатеСцорес, а затим гетГраде.
Дакле, ако пишете јединични тест користећи Моцкито, за ово и требате да осигурате редослед позива на датабасеИмпл, позовите се на тест код и уверите се да су тврдње направљене према очекиваном редоследу.
У горњем примеру, ако променим редослед полагања права, тест ће пропасти, изузев „ВерифицатионИнОрдерФаилуре“.
Након промене редоследа потврде, код изгледа као што је приказано доле:
@Test public void calculateSumAndStore_withValidInput_verifyMockOrder() { // Arrange studentScores = new StudentScoreUpdates(mockDatabaseImpl); int[] scores = {60,70,90}; Mockito.doNothing().when(mockDatabaseImpl).updateScores(anyString(), anyInt()); Mockito.doReturn('A').when(mockDatabaseImpl).getGrade(anyInt()); InOrder inorder = inOrder(mockDatabaseImpl); // Act studentScores.calculateSumAndStore('Student1', scores); // Assert inorder.verify(mockDatabaseImpl).updateScores(anyString(),anyInt()); inorder.verify(mockDatabaseImpl).getGrade(anyInt()); }
Горње извршавање теста баца изузетак са типом:
„ВерифицатионИнОрдерФаилуре“ орг.моцкито.екцептионс.верифицатион.ВерифицатионИнОрдерФаилуре:
Неуспех верификације у редоследу
Тражим, али не позивам:
моцкДатабасеИмпл.упдатеСцорес (
исА (јава.ланг.Стринг),
исА (јава.ланг.Интегер)
П # 11) Враћање више вредности узастопним позивима метода
Одговор: Да би вратио различите вредности за више позива једног и истог метода, Моцкито пружа 3 приступа како је дато у наставку:
до) Коришћење одвојених зарезом: Ово функционише са тхенРетурн.
На пример , узимајући горњи узорак кода, покушајмо да подесимо узастопни клип за метод - гетГраде који ће враћати различите вредности у зависности од низа итерација:
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A','B', 'C');
То значи да када се методе гетГраде позову у методи која се испитује, први позив ће вратити „А“, други позив „Б“ и тако даље.
б) Узастопни тхенРетурн: Ово је приступ који је окован изјавама тхенРетурн. Примена ланчаних позива на исти пример изгледаће као што је приказано доле.
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A').thenReturn('B').thenReturn('C');
ц) Узастопни повратак: Последњи приступ је коришћење доРетурн у ланчаном формату као горе.
doReturn ('A').doReturn('B').doReturn('C').when(mockDatabaseImpl).getGrade( anyInt ())
П # 12) Које су различите врсте ругалица и како они функционишу?
Одговор: Врсте оквира за ругање и како они раде објашњени су у наставку.
Постоје широко 2 категорије ругања:
најбољи системски оптимизатор за Виндовс 10
- Заснован на проки-у - Пример, Моцкито, ЕасиМоцк итд.
- На основу бајткода - Пример, ПоверМоцк, ЈМоцкит итд.
Упоредимо оба ова оквира на различитим параметрима.
Заснован на прокију | На основу бајткода | |
---|---|---|
Једноставно | Једноставније и једноставније за употребу | Можда укључује сложену лажну логику подешавања |
Начин стварања | Креира се проки или лажни објекат који заправо не захтева инстанцу класе / интерфејса | У суштини укључује стварање објеката и током извођења манипулише инстанцама ради исмеваног / прљавог понашања |
Функционалност | Подругљиве класе и интерфејси | Поред класа и интерфејса, омогућава исмевање статичких метода, завршне класе итд |
Јава зависност | Није баш чврсто повезан са Јава верзијама | Будући да ови оквири укључују манипулацију бајт кодом, они су чврсто повезани и можда неће бити компатибилни уназад / унапред у јава верзијама. |
Примери | Моцкито, ЕасиМоцк итд. | ПоверМоцк, ЈМоцкит итд. |
Закључак
Садржај покривен овим чланком служи основним дискусијама око Моцкинг оквира и посебно Моцкито припрема за интервју.
Поред теоретског разумевања обухваћених питања, треба покушати и са стварним примерима кода који учење ових оквира чине забавнијим и занимљивијим.
Надам се да сте уживали у читавом спектру водича у овој Моцкито серији.
Срећно учење.
ПРЕВ Туториал |. | ПРВИ Водич
Препоручено читање
- Интервјуирајте питања и одговоре
- Водич за Моцкито: Моцкито оквир за ругање у јединственом тестирању
- Нека занимљива питања за испитивање софтверског тестирања
- Питања и одговори за испитивање ЕТЛ-а
- Најчешћа питања за интервјуе за Орацле обрасце и извештаје
- Софтверско ручно тестирање Интервју питања за искусне професионалце
- Најпопуларнија техничка питања за Орацле Аппс и Орацле СОА Интервју
- 25 најбољих агилних тестова за интервју и питања и одговори