top 12 mockito interview questions
Preguntes més freqüents de l’entrevista Mockito per trencar l’entrevista burleta Mockito:
Al nostre tutorial anterior, vam aprendre Mètodes privats, estàtics i buits de burla . Llegiu el document tutorials de formació complets a Mockito per a una comprensió clara del marc Mockito.
Aquest article tracta les preguntes típiques més habituals de l'entrevista sobre el marc Mockito Mocking.
S'espera que tots els desenvolupadors o QA coneguin els conceptes bàsics de Mocking per escriure fàcilment les proves de caixa blanca (o proves unitàries) i burlar-se de les dependències per obtenir una millor cobertura de codi i una major confiança en l'aplicació.
Preguntes d'entrevistes Mockito més populars amb respostes detallades
A continuació es detallen les preguntes més freqüents sobre Mocking Frameworks.
P # 1) Per què necessitem burlar-nos?
Resposta: Hi ha molts casos d’ús de burles que ajuden a la prova unitària del codi sota aïllament i fan que la prova sigui molt repetible i predictible.
Generalment es requereix burla quan:
a) El component que s’està provant té dependències que encara no s’han implementat o la implementació està en curs.
Un bon exemple pot ser un punt final de l’API REST que estarà disponible més endavant en algun moment del temps, però l’heu consumit al codi mitjançant una dependència.
Ara, com que la implementació real encara no està disponible, realment coneixeu la majoria de les vegades quina és la resposta esperada d’aquesta API. Els simulacres permeten provar aquest tipus d’integració.
b) El component actualitza l’estat del sistema.
Exemple: Trucades de base de dades: no voldríeu actualitzar la vostra base de dades amb dades que només serveixen per fer proves. Això podria provocar la corrompència de les dades, a més, la disponibilitat de DB és un altre desafiament quan s'executa la prova.
Així, per evitar aquest comportament, es podrien burlar les trucades de base de dades al component que es prova. Per tant, no hi ha un acoblament directe de DB i el component que es prova.
Q # 2) Diferència entre doReturn i desprésReturn.
Resposta: Mockito proporciona dues sintaxis diferents per crear esbossos com:
- doReturn i desprésReturn
- doNothing (no thenNothing)
- llançar i després llançar
Ambdós mètodes configuren els talons i es poden utilitzar per crear / configurar talons i, de vegades, es poden utilitzar indistintament.
quin és el millor programari de còpia de DVD
Llavors, en què es diferencien tots dos?
a) La forma de tallar thenReturn és una forma segura de configurar talons. El que vol dir essencialment és que fa una comprovació en temps de compilació amb els tipus de retorn que també voleu comprovar.
Entenguem això amb un exemple:
Suposa un mètode getItemDetails encès mockedItemService que retorna un objecte de tipus ItemSku. Així també després Torna, no podreu retornar res que no sigui de tipus ItemSku, però amb doReturn podeu configurar el taló per tornar qualsevol cosa i la prova fallarà (o produirà una excepció) durant l'execució.
// funciona
when (mockedItemService.getItemDetails(123)).thenReturn(new ItemSku());
// llança una excepció de temps de compilació
when (mockedItemService.getItemDetails(123)).thenReturn(expectedPrice);
// amb doReturn, la configuració del taló funciona ja que no es compila de manera segura.
// aquí estem intentant retornar un objecte de tipus double que encara funciona i no llança cap advertiment de temps de compilació.
doReturn (expectedPrice).when(mockedItemService.getItemDetails(123)); doReturn (new ItemSku()).when(mockedItemService.getItemDetails(123));
b) Una altra diferència important entre aquestes dues maneres d’arribar és el dels objectes burlats, a part de la seguretat de compilació no hi ha molta diferència.
Tanmateix, per als objectes Spied, el tipus de configuració de stub 'thenReturn' no funcionarà, ja que es traduirà en trucar al mètode real abans que la resposta stubbed sigui retornada com a trucada i no en un simulador, sinó en Spy que envolta una instància d'objecte real. .
Suposem, doncs, que hi ha un espia anomenat spiedObject i té un mètode testMethod que retorna un enter, llavors per configurar un taló en això, haureu d'utilitzar doReturn en lloc de thenReturn.
doReturn (10).when(spiedObject.testMethod());
P # 3) Quan i per què s'ha d'utilitzar un espia?
Resposta: Spy és un tipus de simulació parcial compatible amb Mockito.
Això significa essencialment que és un tipus d’instància on:
a) Quan no es configura cap simulacre, qualsevol interacció amb l'espia provoca la crida als mètodes reals. Però encara us permet verificar les interaccions amb l'objecte espiat com: es deia un mètode realment, quantes vegades es va cridar el mètode, quins eren els arguments amb què es va anomenar el mètode, etc.
b) T’ofereix la flexibilitat per configurar simulacions parcials.
Per exemple, si teniu un objecte amb 2 mètodes: mètode1 i mètode2 i voleu que es cridi a mètode1 i que es burli de mètode2. Els espies proporcionen aquest tipus de configuració.
Per tant, la diferència entre un simulacre i un capçal en termes simples és: es crea un simulacre a partir d’un tipus i no d’una instància, mentre que un capçal embolcalla una instància real de l’objecte de classe.
Q # 4) Per què no es poden burlar els mètodes estàtics amb Mockito?
llista enllaçada circular c ++
Resposta: Els mètodes estàtics s’associen a la pròpia classe i no a cap instància particular de la classe. Això significa que totes les instàncies / objectes de la classe utilitzen la mateixa instància del mètode estàtic.
Els mètodes estàtics s’assemblen més al codi de procediment i s’utilitzen sobretot en sistemes heretats en general.
Les biblioteques simulades solen crear simulacions mitjançant la creació d’instàncies dinàmiques en temps d’execució, ja sigui a través d’interfícies o mitjançant l’herència i, com que el mètode estàtic no s’associa a cap instància en particular, no és possible que els marcs de simulació (com mockito, easy mock, etc.) es burlin dels mètodes estàtics.
Els marcs com el PowerMock que tenen suport per als mètodes estàtics realitzen la manipulació de codis byt en temps d'execució per tal de burlar-se dels mètodes estàtics.
P # 5) Quina és la necessitat de verificar que es digui el simulacre?
Resposta: Configurar un taló en un objecte burlat (o en una instància espiada) no garanteix si fins i tot es va invocar la configuració del tall.
Coincidències de 'verificació', donen la possibilitat de validar si el taló que es va crear va ser realment invocat o no, quantes vegades es va fer la trucada, amb quins arguments es va cridar el mètode de tall, etc.
En essència, ens permet verificar la configuració de la prova i el resultat esperat d’una manera més robusta.
P # 6) Què és un bon codi que es pot provar?
Resposta:
Pocs punts sobre el codi que es pot provar (és a dir, que es podria provar fàcilment per unitat) inclouen:
- Reducció del nombre de dependències o d'acoblament estret - Exemple: Les dependències s’han d’injectar en lloc d’instanciar-les directament.
- Codi que s'adhereix al SRP (Principi de responsabilitat única) - Això significa essencialment que la classe no hauria de tenir múltiples raons per canviar. L’adhesió a SRP evita que les classes creïn dependència d’ell mateix i manté el codi cohesionat i net.
- Ús menor / mínim de mètodes estàtics i classes finals - Generalment, indiquen olors de codi i s’associaven majoritàriament amb el codi heretat.
P # 7) Quines són les limitacions de Mockito?
Resposta: Mockito és un marc d’elecció per a la majoria de projectes basats en Java. És fàcil d’implementar, llegir i entendre.
Alguns dels inconvenients o limitacions en termes de funcionalitat són:
- La seva incapacitat per burlar-se dels mètodes estàtics.
- No es poden burlar constructors, mètodes privats i classes finals.
Q # 8) Quins marcs poden suportar burles de mètodes privats i estàtics?
Resposta: Els marcs com PowerMockito (extensions del framework Mockito), JMockit, etc. ofereixen mitjans per burlar mètodes privats i estàtics.
Q # 9) Mètodes predeterminats de burla / retoc en Interfície a Java 8.
Resposta: Amb la implementació de mètodes predeterminats de Java 8 a Interface, Mockito proporciona suport immediat per burlar-se d’aquests mètodes predeterminats. (Tingueu en compte que aquest suport es va introduir a partir de Mockito 2).
Aquests mètodes poden ser burlats / eliminats com qualsevol altre mètode d'una classe o interfície.
Q # 10) Com es pot verificar l'ordre de les invocacions de taló a Mockito?
Resposta: Quan vulgueu verificar l'ordre en què es cridaven els simulacres, Mockito ' En ordre ”Es pot utilitzar la interfície.
Durant la prova, simplement heu de configurar / crear un objecte Inorder, llistant una llista d'objectes simulats en els quals cal determinar l'ordre dels simulacres (si hi ha diversos mètodes al mateix simulador i no hi ha cap altra simulació que necessiti per verificar-ho, n’hi ha prou d’esmentar la classe burlada només una vegada).
Penseu en la prova que es mostra a continuació, que defineix un objecte d’InOrder i esmenta 2 ocurrències de 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()); }
A més, com a referència, indicar el codi del mètode a prova serà útil per entendre l’ordre d’execució de la prova:
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); }
Com es va veure anteriorment, databaseImpl primer crida a updateScores i després a getGrade.
Per tant, si esteu escrivint una prova unitària amb Mockito, per a això i heu d’assegurar l’ordre de les trucades a databaseImpl, consulteu el codi de prova i assegureu-vos que les afirmacions es fan segons l’ordre esperat.
A l'exemple anterior, si canvio l'ordre d'afirmacions, farà que la prova falli amb una excepció de 'VerificationInOrderFailure'.
programari espia de telèfons mòbils per a Android
Després de canviar l'ordre d'afirmació, el codi es veu com es mostra a continuació:
@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()); }
L'execució de la prova anterior genera una excepció amb el tipus:
'VerificationInOrderFailure' org.mockito.exceptions.verification.VerificationInOrderFailure:
Verificació en cas d'error de l'ordre
Buscat però no invocat:
mockDatabaseImpl.updateScores (
isA (java.lang.String),
isA (java.lang.Integer)
Q # 11) Retorn de diversos valors contra trucades de mètodes consecutius
Resposta: Per retornar valors diferents per a diverses invocacions del mateix mètode de tall, Mockito proporciona 3 aproximacions tal i com es mostra a continuació:
a) Mitjançant separacions per comes: Això funciona amb thenReturn.
Per exemple , prenent l'exemple de codi anterior, intentem configurar un consubstanc consecutiu per al mètode - getGrade que retornarà diferents valors en funció de la seqüència d'iteracions:
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A','B', 'C');
Això significa que quan els mètodes getGrade es criden al mètode que es prova, la primera invocació retornarà 'A', la segona invocació retornarà 'B', etc.
b) Retorn consecutiu: Aquest és un enfocament encadenat amb les declaracions thenReturn. Si apliqueu trucades encadenades al mateix exemple, es mostrarà com es mostra a continuació.
when (mockDatabaseImpl.getGrade( anyInt ())).thenReturn('A').thenReturn('B').thenReturn('C');
c) Retorn consecutiu: L'últim enfocament és fer servir doReturn en el format encadenat tal com s'ha indicat anteriorment.
doReturn ('A').doReturn('B').doReturn('C').when(mockDatabaseImpl).getGrade( anyInt ())
P # 12) Quins són els diferents tipus de marcs de burla i com funcionen?
Resposta: A continuació s’expliquen els tipus de marc de burla i com funcionen.
Hi ha àmpliament dues categories de marcs de burla:
- Basat en proxy - Exemple, Mockito, EasyMock, etc.
- Basat en codis byt - Exemple, PowerMock, JMockit, etc.
Comparem aquests dos marcs amb paràmetres diferents.
Basat en servidor intermediari | Basat en codis byt | |
---|---|---|
De manera senzilla | Més senzill i fàcil d'utilitzar | Pot implicar una lògica de configuració de simulacions complexa |
Mode de creació | Es crea un proxy o un objecte fals que en realitat no requereix instància de classe / interfície | Es tracta bàsicament de crear objectes i en temps d'execució manipula les instàncies per al comportament burlat / obstinat |
Funcionalitat | Classes i interfícies burletes | A més de classes i interfícies, permet burlar mètodes estàtics, classes finals, etc. |
Dependència de Java | No molt ben unit a les versions Java | Atès que aquests marcs impliquen manipulació de codis byt, estan fortament acoblats i és possible que no siguin compatibles amb les versions java. |
Exemples | Mockito, EasyMock, etc. | PowerMock, JMockit, etc. |
Conclusió
El contingut tractat en aquest article serveix de debats bàsics entorn dels marcs de Mocking i específicament de la preparació d’entrevistes de Mockito.
A més d’obtenir una comprensió teòrica de les preguntes tractades, també s’ha de provar de fer exemples de codi real que facin que l’aprenentatge d’aquests marcs sigui més divertit i interessant.
Espero que us hagi agradat tota la gamma de tutorials d’aquesta sèrie de Mockito.
Aprenentatge feliç.
PREV Tutorial | PRIMER Tutorial
Lectura recomanada
- Preguntes i respostes de l’entrevista
- Tutorial de Mockito: Marc Mockito per burlar-se de les proves unitàries
- Algunes preguntes d’entrevistes de proves de programari interessants
- Preguntes i respostes de l'entrevista de proves ETL
- Preguntes principals sobre les entrevistes sobre formularis i informes d'Oracle
- Preguntes d'entrevistes de proves manuals de programari per a professionals experimentats
- Principals preguntes tècniques d’entrevistes d’Oracle Apps i Oracle SOA
- 25 millors preguntes i respostes d’entrevista de proves àgils