top 12 mockito interview questions
Nejčastěji kladené otázky týkající se rozhovoru s Mockitem k rozluštění Mockito Mocking Interview:
V našem předchozím výukovém programu jsme se to naučili Soukromé, statické a neplatné metody zesměšňování . Přečtěte si kompletní výukové návody na Mockito pro jasné pochopení rámce Mockito.
Tento článek se věnuje nejčastěji kladeným typickým dotazovacím otázkám týkajícím se rámce Mockito Mocking.
Očekává se, že každý vývojář nebo QA bude znát základy Mockingu, aby mohl snadno psát ty testy v bílé krabici (nebo testy jednotek) a zesměšňovat závislosti pro lepší pokrytí kódu a větší důvěru v aplikaci.
Nejoblíbenější Mockito Interview Otázky s podrobnými odpověďmi
Níže jsou uvedeny nejčastěji kladené otázky o Mocking Frameworks.
Otázka č. 1) Proč se musíme posmívat?
Odpovědět: Existuje mnoho případů použití zesměšňování, které pomáhají při jednotkovém testování kódu v izolaci a činí test vysoce opakovatelným a předvídatelným.
Vysmívání se obecně vyžaduje, když:
na) Testovaná komponenta má závislosti, které ještě nejsou implementovány nebo implementace probíhá.
Dobrým příkladem může být koncový bod REST API, který bude k dispozici později v určitém okamžiku, ale spotřebovali jste ho v kódu prostřednictvím závislosti.
Protože skutečná implementace stále není k dispozici, víte většinou, jaká je očekávaná odezva daného API. Mocks vám umožní otestovat tyto druhy integrace.
b) Komponenta aktualizuje stav v systému.
Příklad: Volání DB - nechtěli byste aktualizovat svoji databázi o data, která jsou pouze pro účely testování. To by mohlo mít za následek poškození dat, navíc je dostupnost DB další výzvou při provádění testu.
Aby se takovému chování zabránilo, mohly by se hovory DB zesměšňovat v testované komponentě. Proto neexistuje přímé spojení DB a testované součásti.
Otázka č. 2) Rozdíl mezi doReturn a thenReturn.
Odpovědět: Mockito poskytuje dvě různé syntaxe pro vytváření pahýlů, jako jsou:
- doReturn a potéReturn
- nedělat nic (ne pak nic)
- doThrow a thenThrow
Obě tyto metody nastavují pahýly a lze je použít k vytvoření / nastavení pahýlů a lze je občas použít zaměnitelně.
jak otevřít soubor .bin Windows 10
Jak se tedy oba liší?
na) Způsob thenReturn pahýlů je typově bezpečný způsob nastavení pahýlů. To v podstatě znamená, že provádí kontrolu kompilace proti návratovým typům, které chcete také stubovat.
Pochopme to na příkladu:
Předpokládejme metodu getItemDetails na mockedItemService který vrací objekt typu ItemSku. Takže s pak návrat, nebudete moci vrátit nic jiného než typu ItemSku, ale pomocí doReturn můžete nastavit útržek, který vrátí cokoli, a test selže (nebo vyvolá výjimku) během provádění.
// funguje
when (mockedItemService.getItemDetails(123)).thenReturn(new ItemSku());
// vyvolá výjimku při kompilaci
when (mockedItemService.getItemDetails(123)).thenReturn(expectedPrice);
// s doReturn, jak nastavení pahýlu funguje, protože není kompilované bezpečné.
// zde se pokoušíme vrátit objekt typu double, který stále funguje a nevyvolá žádné varování při kompilaci.
doReturn (expectedPrice).when(mockedItemService.getItemDetails(123)); doReturn (new ItemSku()).when(mockedItemService.getItemDetails(123));
b) Dalším důležitým rozdílem mezi těmito 2 způsoby útržku je pro Mocked objekty, kromě bezpečnosti kompilace není velký rozdíl.
U objektů Spied však nebude fungovat nastavení „stub“ „thenReturn“, protože bude mít za následek volání skutečné metody dříve, než se stubbed odpověď vrátí jako volání, a nikoli na Mock, ale na Spy, který zabalí instanci skutečného objektu .
Předpokládejme tedy, že existuje nějaký špión spiedObject a má metodu testMethod, která vrací celé číslo, pak k nastavení pahýl na to budete muset použít doReturn místo thenReturn.
doReturn (10).when(spiedObject.testMethod());
Otázka č. 3) Kdy a proč by měl být špión použit?
Odpovědět: Spy je typ částečného předstírání podporovaného Mockitem.
To v podstatě znamená, že jde o typ instance, kde:
na) Pokud není nastaven žádný falešný, jakákoli interakce se špionem vede k volání skutečných metod. Ale stále vám umožňuje ověřit interakce se sledovaným objektem jako - byla metoda skutečně nazývána, kolikrát byla metoda volána, jaké byly argumenty, pomocí kterých byla metoda volána atd.
b) Poskytuje vám flexibilitu při nastavování dílčích falešných zpráv.
Například, pokud máte objekt se 2 metodami - metodou1 a metodou2 a chcete, aby byla volána metoda1 a metoda2 byla zesměšňována. Spies poskytují tento druh nastavení.
Rozdíl mezi falešným a pahýlem tedy je - falešný je vytvořen z typu a ne z instance, zatímco pahýl zabalí skutečnou instanci objektu třídy.
Otázka 4) Proč nelze pomocí Mockita zesměšňovat statické metody?
nedefinovaný odkaz na funkci c ++
Odpovědět: Statické metody jsou přidruženy k samotné třídě a nikoli k žádné konkrétní instanci třídy. To znamená, že všechny instance / objekty třídy používají stejnou instanci statické metody.
Statické metody se spíše podobají procedurálním kódům a používají se většinou ve starších systémech obecně.
Falešné knihovny obvykle vytvářejí falešné zprávy dynamickým vytvářením instancí za běhu, a to buď prostřednictvím rozhraní, nebo prostřednictvím dědičnosti, a protože statická metoda není spojena s žádnou konkrétní instancí, není možné, aby se falešné rámce (jako falešné, snadno falešné atd.) Vysmívaly statickým metodám.
Rámečky jako PowerMock, které mají podporu pro statické metody, provádějí manipulaci s bytecode za běhu, aby zesměšňovaly statické metody.
Otázka č. 5) Jaká je potřeba ověřit, zda byl falešný volaný?
Odpovědět: Nastavení stubu na zesměšňovaném objektu (nebo špehované instanci) nezaručuje, zda bylo stubbed nastavení dokonce vyvoláno.
„Ověřovací“ srovnávače, dát zařízení k ověření, zda byl stub, který byl nastaven, skutečně vyvolán nebo ne, kolikrát byl hovor proveden, s jakými argumenty byla volána metoda stubbed atd.
V podstatě nám umožňuje ověřit nastavení testu a očekávaný výsledek robustnějším způsobem.
Otázka č. 6) Co je to dobrý testovatelný kód?
Odpovědět:
Několik bodů o testovatelném kódu (což znamená, že by mohl být snadno testován na jednotku) zahrnuje:
- Snížení počtu závislostí nebo těsné spojení - Příklad: Závislosti by měly být vkládány spíše než přímé instance.
- Kód, který dodržuje SRP (zásada jediné odpovědnosti) - To v podstatě znamená, že třída by neměla mít více důvodů ke změně. Dodržování SRP se vyhýbá tomu, aby třídy vytvářely závislost na sobě, a udržuje kód soudržný a čistý.
- Menší / minimální použití statických metod a závěrečných tříd - Ty obecně označují pachy kódu a byly většinou spojeny se starým kódem.
Otázka č. 7) Jaká jsou omezení Mockita?
Odpovědět: Mockito je rámcem volby pro většinu projektů založených na javě. Je snadné jej implementovat, číst a rozumět mu.
Některé z nevýhod nebo omezení z hlediska funkčnosti jsou:
- Jeho neschopnost zesměšňovat statické metody.
- Konstruktory, soukromé metody a závěrečné třídy nelze zesměšňovat.
Otázka č. 8) Které rámce mohou podporovat zesměšňování soukromých a statických metod?
Odpovědět: Rámečky jako PowerMockito (rozšíření rámce Mockito), JMockit atd. Poskytují prostředky k zesměšňování soukromých a statických metod.
Q # 9) Mocking / Stubbing výchozí metody v rozhraní v Javě 8.
Odpovědět: S implementací výchozích metod v rozhraní Java 8 poskytuje rozhraní Mockito okamžitou podporu pro simulaci těchto výchozích metod. (Upozorňujeme, že tato podpora byla zavedena od verze Mockito 2 dále).
Tyto metody lze zesměšňovat / potlačovat jako jakékoli jiné metody třídy nebo rozhraní.
Otázka č. 10) Jak lze v Mockitu ověřit pořadí vyvolání pahýlů?
Odpovědět: Chcete-li ověřit pořadí, v jakém se vysmívali, Mockitovo „ V pořádku “Lze použít rozhraní.
Během testu jednoduše musíte nastavit / vytvořit objekt Inorder a vypsat seznam falešných objektů, u kterých je třeba zjistit pořadí falešných (pokud existuje více metod na stejném falešném a neexistuje žádný jiný falešný, který potřebuje k ověření pak stačí zmínit posměšnou třídu pouze jednou).
Zvažte níže uvedený test, který definuje objekt InOrder a uvádí 2 výskyty mockDatabaseImpl
@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()); }
Pro informaci vám pomůže seznam kódů testované metody, abyste pochopili pořadí provádění testu:
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); }
Jak je vidět výše, databaseImpl nejprve zavolá updateScores a poté zavolá getGrade.
Takže pokud píšete test jednotky pomocí Mockito, pro toto a potřebujete zajistit pořadí volání na databaseImpl, podívejte se na testovací kód a zajistěte, aby se tvrzení prováděla podle očekávaného pořadí.
Ve výše uvedeném příkladu, pokud změním pořadí tvrzení, způsobí to selhání testu s výjimkou „VerificationInOrderFailure“.
Po změně pořadí uplatnění kód vypadá takto:
@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()); }
Výše uvedené provedení testu vyvolá výjimku s typem:
„VerificationInOrderFailure“ org.mockito.exceptions.verification.VerificationInOrderFailure:
Ověření selhání objednávky
Chtěl, ale nebyl vyvolán:
mockDatabaseImpl.updateScores (
isA (java.lang.String),
isA (java.lang.Integer)
Otázka č. 11) Vrácení více hodnot proti následným voláním metody
Odpovědět: Chcete-li vrátit různé hodnoty pro více vyvolání stejné stubbed metody, Mockito poskytuje 3 přístupy, jak je uvedeno níže:
jak odlišné je c od c ++
na) Použití oddělených čárkami: Toto funguje s thenReturn.
Například , přičemž výše uvedený ukázkový kód, zkusme nastavit postupný pahýl pro metodu - getGrade, která vrátí různé hodnoty v závislosti na posloupnosti iterací:
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A','B', 'C');
To znamená, že když jsou metody getGrade volány v testované metodě, první vyvolání vrátí „A“, druhé vyvolání vrátí „B“ atd.
b) Po sobě jdoucí pak Návrat: Jedná se o přístup, který je zřetězen s příkazy thenReturn. Aplikování zřetězených volání na stejný příklad bude vypadat, jak je znázorněno níže.
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A').thenReturn('B').thenReturn('C');
c) Po sobě jdoucí doReturn: Posledním přístupem je použití doReturn v zřetězeném formátu, jak je uvedeno výše.
doReturn ('A').doReturn('B').doReturn('C').when(mockDatabaseImpl).getGrade( anyInt ())
Otázka č. 12) Jaké jsou různé typy zesměšňujících rámců a jak fungují?
Odpovědět: Níže jsou vysvětleny typy rámce Mocking a způsob jejich fungování.
V zásadě existují 2 kategorie zesměšňujících rámců:
- Na základě proxy - Příklad, Mockito, EasyMock atd.
- Bytecode založené - Příklad, PowerMock, JMockit atd.
Pojďme porovnat oba tyto rámce na různých parametrech.
Proxy založené | Bytecode založené | |
---|---|---|
Zjednodušeně | Jednodušší a snadnější použití | Může to zahrnovat složitou simulaci falešného nastavení |
Způsob tvorby | Je vytvořen proxy nebo falešný objekt, který ve skutečnosti nevyžaduje instanci třídy / rozhraní | V podstatě to zahrnuje vytváření objektů a za běhu manipuluje s instancemi zesměšňovaného / zamítnutého chování |
Funkčnost | Mocking tříd a rozhraní | Kromě tříd a rozhraní umožňuje zesměšňovat statické metody, závěrečné třídy atd |
Závislost Java | Není příliš těsně spjato s verzemi Java | Vzhledem k tomu, že tyto rámce zahrnují manipulaci s bytecode, jsou pevně spojeny a nemusí být zpětně / vpřed kompatibilní ve verzích Java. |
Příklady | Mockito, EasyMock atd. | PowerMock, JMockit atd. |
Závěr
Obsah zahrnutý v tomto článku slouží základním diskusím o rámcích Mocking a konkrétně přípravě rozhovorů Mockito.
Kromě teoretického porozumění probraným otázkám byste se měli také pokusit udělat příklady skutečných kódů, díky nimž je učení těchto frameworků zábavnější a zajímavější.
Doufám, že jste si užili celou řadu výukových programů v této sérii Mockito.
Šťastné učení.
Výukový program PREV | PRVNÍ výuka
Doporučené čtení
- Dotazy a odpovědi na pohovor
- Výukový program Mockito: Rámec Mockito pro zesměšňování při testování jednotek
- Některé zajímavé otázky týkající se testování softwaru
- ETL Testing Interview Otázky a odpovědi
- Nejlepší dotazy a odpovědi na dotazníky společnosti Oracle Forms and Reports
- Softwarové manuální testování Dotaz na rozhovor pro zkušené profesionály
- Nejlepší technické dotazy k aplikacím Oracle a dotazům Oracle SOA Interview
- 25 nejlepších agilních testovacích otázek a odpovědí na rozhovor