top 12 mockito interview questions
Najčešće postavljana pitanja iz Mockito intervjua za ispucavanje Mockito podrugljivog intervjua:
U našem prethodnom tutorialu naučili smo Privatne, statičke i praznine metode ruganja . Pročitajte cjelovite vodiče za obuku o Mockitu za jasno razumijevanje Mockito okvira.
Ovaj članak pokriva najčešće postavljana pitanja iz intervjua u okviru Mockito Mocking.
Očekuje se da će svaki programer ili QA znati osnove ruganja kako bi s lakoćom napisao najviše testova bijele kutije (ili jediničnih testova) i ismijao ovisnosti radi poboljšanog pokrivanja koda i većeg povjerenja u aplikaciju.
Najpopularnija pitanja u vezi s Mockito intervjuom s detaljnim odgovorima
U nastavku su navedena najčešće postavljana pitanja o Mocking Frameworks.
P # 1) Zašto nam je potrebno ruganje?
Odgovor: Puno je slučajeva ruganja koji pomažu u jedinstvenom testiranju izoliranog koda i čine test vrlo ponovljivim i predvidljivim.
Ruganje je obično potrebno kada:
do) Testirana komponenta ima ovisnosti koje još nisu implementirane ili je implementacija u tijeku.
Dobar primjer može biti krajnja točka REST API-a koja će biti dostupna kasnije u određenom trenutku, ali vi ste je potrošili u kodu putem ovisnosti.
Sada, dok stvarna implementacija još uvijek nije dostupna, zaista većinu vremena znate kakav je očekivani odgovor tog API-ja. Izrugivanje vam omogućuje testiranje takvih vrsta integracije.
b) Komponenta ažurira stanje u sustavu.
Primjer: DB pozivi - ne biste željeli ažurirati svoj DB podacima koji su samo za potrebe testiranja. To bi moglo rezultirati oštećivanjem podataka, štoviše, dostupnost DB-a još je jedan izazov kada se test izvršava.
Stoga bi se izbjeglo takvo ponašanje, DB pozivi bi se mogli ismijavati u komponenti koja se testira. Stoga nema izravne sprege DB-a i komponente koja se ispituje.
P # 2) Razlika između doReturn i thenReturn.
Odgovor: Mockito nudi dvije različite sintakse za stvaranje stubova poput:
- doReturn, a zatimReturn
- ne radi ništa (ne tada ništa)
- doThrow, a zatimThrow
Obje ove metode postavljaju klinove i mogu se koristiti za stvaranje / postavljanje kvara i ponekad se mogu koristiti naizmjenično.
najbolja besplatna usluga konferencijskog poziva 2020
Pa, kako se oboje razlikuju?
do) ThenReturn način nabijanja je vrsta sigurnog načina postavljanja brtvi. To u osnovi znači da vrši provjeru vremena kompajliranja prema vrstama povratka koje želite i oštetiti.
Shvatimo to na primjeru:
Pretpostavimo metodu getItemDetails na mockedItemService koji vraća objekt tipa ItemSku. Tako i s zatim Povratak, nećete moći vratiti ništa osim tipa ItemSku, ali s doReturn možete postaviti klizanje tako da vraća bilo što i test neće uspjeti (ili izuzeti) tijekom izvršenja.
// radi
when (mockedItemService.getItemDetails(123)).thenReturn(new ItemSku());// baca iznimku vremena prevođenja
when (mockedItemService.getItemDetails(123)).thenReturn(expectedPrice);// s doReturn, oba podešavanja klina rade jer nisu sigurna za kompajliranje.
// ovdje pokušavamo vratiti objekt tipa double koji i dalje radi i ne daje upozorenje o vremenu kompajliranja.
doReturn (expectedPrice).when(mockedItemService.getItemDetails(123)); doReturn (new ItemSku()).when(mockedItemService.getItemDetails(123));b) Sljedeća važna razlika između ova dva načina prebacivanja je za ismijane objekte, osim sigurnosti pri kompajliranju nema velike razlike.
Međutim, za špijunirane objekte postavka vrste 'thenReturn' neće raditi, jer će rezultirati pozivanjem stvarne metode prije nego što se zavrnuti odgovor vrati kao poziv i to ne na Mock, već na Spy koji omotava stvarnu instancu objekta .
Pa pretpostavimo, postoji špijun po imenu spiedObject i ima metodu testMethod koja vraća cijeli broj, a zatim ćete za postavljanje kvara na ovom mjestu morati koristiti doReturn umjesto thenReturn.
doReturn (10).when(spiedObject.testMethod());P # 3) Kada i zašto treba koristiti špijuna?
Odgovor: Špijun je vrsta djelomičnog ruganja koje podržava Mockito.
To u osnovi znači da je vrsta instance u kojoj:
do) Kad se ne postavi nikakva lažna slika, svaka interakcija sa špijunom rezultira pozivanjem pravih metoda. No, još uvijek vam omogućuje da provjerite interakcije s špijuniranim objektom poput - je li metoda zapravo pozvana, koliko je puta metoda pozvana, koji su argumenti korišteni koji je metod pozvan itd.
b) Omogućuje vam postavljanje djelomičnih lažnih slika.
Na primjer, ako imate objekt s 2 metode - metoda1 i metoda2 i želite da se metoda1 poziva i da se ruga metodi2. Špijuni pružaju ovu vrstu postavljanja.
Dakle, razlika između mock-a i stub-a jednostavnim riječima je - lažna izrada je stvorena od tipa, a ne od instance, dok stub obavija stvarnu instancu objekta klase.
P # 4) Zašto se statične metode ne mogu ismijati pomoću Mockita?
nedefinirana referenca na funkciju c ++
Odgovor: Statičke metode povezane su sa samom klasom, a ne s određenim primjerom klase. To znači da sve instance / objekti klase koriste istu instancu statičke metode.
Statičke metode su više poput proceduralnog koda i uglavnom se koriste u naslijeđenim sustavima općenito.
Lažne biblioteke obično stvaraju lažne izrade dinamičkim stvaranjem instance tijekom izvođenja, bilo putem sučelja ili nasljeđivanjem, a kako statička metoda nije povezana ni s jednom određenom instancom, nije moguće da se ruganje okvira (poput mockito, easy mock, itd.) Ruga statičkim metodama.
Okviri poput PowerMocka koji imaju podršku za statičke metode izvode manipulaciju bajt kodom u vrijeme izvođenja kako bi se rugali statičkim metodama.
P # 5) Koja je potreba za potvrdom da je lažni poziv pozvan?
Odgovor: Postavljanje klizača na izrugivani objekt (ili špijunirane instance) ne garantira je li ta klatna postavka uopće pozvana.
'Verifikacijski' podudarači, omogućuju provjeru je li zapravo pokrenut klinac koji je postavljen ili nije, koliko je puta upućen poziv, s kojim argumentima je pozvana klatna metoda itd.
U osnovi, omogućuje nam da robusnije provjerimo postavke testa i očekivani ishod.
P # 6) Koji je dobar testni kod?
Odgovor:
Nekoliko točaka o provjerljivom kodu (što znači da se lako mogu testirati jedinice) uključuju:
- Smanjen broj ovisnosti ili čvrsto spajanje - Primjer: Ovisnosti treba ubrizgati, a ne izravno ih izvoditi.
- Kodeks koji se pridržava SRP-a (načelo jedinstvene odgovornosti) - To u osnovi znači da klasa ne bi trebala imati više razloga za promjenu. Pridržavanje SRP-a izbjegava stvaranje klasa o sebi i održava kôd povezanim i čistim.
- Manje / minimalno korištenje statičkih metoda i završne klase - Oni obično označavaju mirise koda i uglavnom su bili povezani sa naslijeđenim kodom.
P # 7) Koja su ograničenja Mockita?
Odgovor: Mockito je okvir izbora za većinu projekata utemeljenih na javi. Jednostavno ga je implementirati, pročitati i razumjeti.
Neki od nedostataka ili ograničenja u pogledu funkcionalnosti su:
- Njegova nesposobnost ismijavanja statičkih metoda.
- Konstruktori, privatne metode i završne satove ne mogu se izrugivati.
P # 8) Koji okviri mogu podržati ruganje privatnim i statičkim metodama?
Odgovor: Okviri poput PowerMockito (proširenja Mockito okvira), JMockit itd. Pružaju sredstva za ruganje privatnim i statičkim metodama.
P # 9) Ismijavanje / zaustavljanje zadanih metoda u sučelju u Javi 8.
Odgovor: S implementacijom zadanih metoda Java 8 u sučelju, Mockito nudi podršku za ismijavanje takvih zadanih metoda. (Imajte na umu da je ova podrška uvedena od Mockito 2 nadalje).
Te se metode mogu izrugivati / klecati kao i bilo koje druge metode klase ili sučelja.
P # 10) Kako se u Mockitu može provjeriti redoslijed priziva kvara?
Odgovor: Kada želite provjeriti redoslijed kojim su se nazivali izrugivanjima, Mockitoov ' U redu ”Sučelje se može koristiti.
Tijekom testa, jednostavno morate postaviti / stvoriti Inorder objekt, navodeći popis lažnih objekata na kojima treba utvrditi redoslijed lažnih (ako postoji više metoda na istom lažnom i nema drugog lažnog koji treba da bi se provjerilo onda je dovoljno samo jednom spomenuti izrugivani razred).
gdje mogu pronaći svoj mrežni sigurnosni ključ
Razmotrite test dat u nastavku koji definira objekt InOrdera i spominje 2 pojavljivanja 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()); } Također, za referencu, navođenje koda metode koja se ispituje bit će korisno za razumijevanje redoslijeda izvođenja testa:
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); }Kao što se vidi gore, databaseImpl prvo poziva updateScores, a zatim getGrade.
Dakle, ako pišete jedinični test pomoću Mockita, za to i trebate osigurati redoslijed poziva na databaseImpl, pogledajte testni kôd i osigurajte da su tvrdnje izrađene prema očekivanom redoslijedu.
U gornjem primjeru, ako promijenim redoslijed tvrdnji, to će uzrokovati neuspjeh testa, osim 'VerificationInOrderFailure'.
Nakon promjene redoslijeda potvrde, kod izgleda kao što je prikazano dolje:
@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()); } Gornje izvršavanje testa baca iznimku s tipom:
“VerificationInOrderFailure” org.mockito.exceptions.verification.VerificationInOrderFailure:
Neuspjeh provjere narudžbe
Tražim, ali ne pozivam:
mockDatabaseImpl.updateScores (
jeA (java.lang.String),
jeA (java.lang.Integer)
P # 11) Vraćanje više vrijednosti uzastopnim pozivima metode
Odgovor: Da bi vratio različite vrijednosti za višestruke pozive iste stubbed metode, Mockito nudi 3 pristupa kako je dano u nastavku:
do) Korištenje odvojenih zarezom: Ovo radi s thenReturn.
Na primjer , uzimajući gornji uzorak koda, pokušajmo postaviti uzastopni klat za metodu - getGrade koja će vraćati različite vrijednosti ovisno o slijedu iteracija:
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A','B', 'C');To znači da će se, kada se metode getGrade pozovu u metodi koja se ispituje, prvi poziv vratiti 'A', drugi poziv 'B' i tako dalje.
b) Uzastopni zatim Povratak: Ovo je pristup koji je povezan s izjavama thenReturn. Primjena lančanih poziva na isti primjer izgledat će kao što je prikazano u nastavku.
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A').thenReturn('B').thenReturn('C');c) Uzastopni povratak: Posljednji pristup je korištenje doReturn u lančanom formatu kao gore.
doReturn ('A').doReturn('B').doReturn('C').when(mockDatabaseImpl).getGrade( anyInt ())P # 12) Koje su različite vrste podsmiješnih okvira i kako oni djeluju?
Odgovor: Vrste okvira za ruganje i kako oni rade objašnjeni su u nastavku.
Postoje općenito 2 kategorije podsmiješnih okvira:
- Na temelju proxyja - Primjer, Mockito, EasyMock itd.
- Na temelju bajtkoda - Primjer, PowerMock, JMockit itd.
Usporedimo oba ova okvira na različitim parametrima.
| Na temelju proxyja | Na temelju bajtkoda | |
|---|---|---|
| Jednostavno | Jednostavnije i jednostavnije za upotrebu | Može uključivati složenu lažnu logiku postavljanja |
| Način stvaranja | Stvoren je proxy ili lažni objekt koji zapravo ne zahtijeva instancu klase / sučelja | U osnovi uključuje stvaranje objekata i u vrijeme izvođenja manipulira instancama radi ismijanog / nejasnog ponašanja |
| Funkcionalnost | Podrugljive klase i sučelja | Pored klasa i sučelja, omogućuje ismijavanje statičkih metoda, završne klase itd |
| Ovisnost o Javi | Nije jako usko povezan s java verzijama | Budući da ti okviri uključuju manipulaciju bajt kodom, oni su usko povezani i možda neće biti kompatibilni s natrag / naprijed u java verzijama. |
| Primjeri | Mockito, EasyMock itd. | PowerMock, JMockit itd. |
Zaključak
Sadržaj obrađen u ovom članku služi osnovnim raspravama oko Mocking okvira, a posebno Mockito priprema za intervju.
Uz teoretsko razumijevanje obuhvaćenih pitanja, treba pokušati i sa stvarnim primjerima koda koji učenje ovih okvira čine zabavnijim i zanimljivijim.
Nadam se da ste uživali u čitavom nizu vodiča u ovoj Mockito seriji.
Sretno učenje.
Preporučena literatura
- Intervjuirajte pitanja i odgovore
- Vodič za Mockito: Mockito okvir za ruganje u jedinstvenom testiranju
- Neka zanimljiva pitanja za ispitivanje softverskog testiranja
- Pitanja i odgovori za ispitivanje ETL-a
- Najčešća pitanja za intervjue za Oracle obrasce i izvješća
- Softversko ručno testiranje Intervju pitanja za iskusne profesionalce
- Najpopularnija tehnička pitanja za Oracle Apps i Oracle SOA Intervju
- 25 najboljih agilnih testova za pitanja i odgovore na intervjue