Mockitove ružne metode

1. Pregled

Ovaj vodič ilustrira razne upotrebe standardne statike oponašanje metode Mockito API.

Kao i kod ostalih članaka usredotočenih na Mockito okvir (poput Mockito Verify ili Mockito When / Then), MyList klasa prikazana u nastavku koristit će se kao suradnik za ismijavanje u test slučajevima:

javna klasa MyList proširuje AbstractList {@Override javni niz get (int index) {return null; } @Preuzmi javnu int veličinu () {return 1; }}

2. Jednostavno ruganje

Najjednostavnija preopterećena varijanta oponašanje metoda je ona s jednim parametrom za klasu koja se ruga:

javna statička T mock (Class classToMock)

Koristit ćemo se ovom metodom za izrugivanje klase i postavljanje očekivanja:

MyList listMock = lažno (MyList.class); kada (listMock.add (anyString ())). thenReturn (false);

Zatim izvedite metodu lažno:

logička vrijednost dodana = listMock.add (randomAlphabetic (6));

Sljedeći kod potvrđuje da dodati metoda je pozvana u lažnom prikazu, i da pozivanje vraća vrijednost koja odgovara očekivanju koje smo prethodno postavili:

verify (listMock) .add (anyString ()); assertThat (dodano, je (netačno));

3. Ruganje s Mockovim imenom

U ovom ćemo odjeljku obraditi još jednu varijantu oponašanje metoda koja se dobiva s argumentom kojim se navodi naziv lažne slike:

javna statička T lažna (klasa classToMock, naziv niza)

Općenito govoreći, naziv lažnog imena nema nikakve veze s radnim kodom, ali može biti od pomoći kada je riječ o otklanjanju pogrešaka, gdje se njegovo ime koristi za pronalaženje pogrešaka u provjeri.

Da bismo bili sigurni da je navedeno ime lažnog imena uključeno u poruku o iznimci izbačenoj iz neuspješne provjere, oslonit ćemo se na JUnit implementaciju TestRule sučelje, tzv OčekivanoIznimka, i uključite ga u probni tečaj:

@Rule public ExpectedException bačen = ExpectedException.none ();

Ovo će se pravilo koristiti za rukovanje iznimkama izbačenim iz metoda ispitivanja.

U sljedećem kodu kreiramo lažni obrazac za MyList razredu i imenuj ga myMock:

MyList listMock = lažni (MyList.class, "myMock");

Nakon toga postavite očekivanje za metodu lažne i izvršite je:

kada (listMock.add (anyString ())). thenReturn (false); listMock.add (randomAlphabetic (6));

Stvorit ćemo namjerno neuspjelu provjeru koja bi trebala donijeti iznimku s porukom koja sadrži informacije o lažnom predstavljanju. Da bi se to učinilo, prvo treba postaviti očekivanja o iznimci:

thrown.expect (TooLittleActualInvocations.class); thrown.expectMessage (containsString ("myMock.add"));

Sljedeća provjera ne bi trebala uspjeti i izbaciti iznimku koja se podudara s onim što se očekivalo:

verify (listMock, puta (2)). add (anyString ());

Evo poruke bačene iznimke:

org.mockito.exceptions.verification.TooLittleActualInvocations: myMock.add (); Tražen 2 puta: na com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_thenCorrect (MockitoMockTest.java: ...), ali bio je 1 put: na com.baeldung.mockito.MockitoMockTest .whenUsingMockWithName_java.java

Kao što vidimo, ime lažnog imena uključeno je u poruku o iznimci, što će biti korisno za pronalaženje točke neuspjeha u slučaju neuspješne provjere.

4. Ruganje sa Odgovor

Ovdje ćemo pokazati upotrebu a oponašanje inačica u kojoj se strategija lažnih odgovora na interakciju konfigurira u vrijeme izrade. Ovaj oponašanje Potpis metode u Mockito dokumentaciji izgleda ovako:

javna statička T mock (Class classToMock, Answer defaultAnswer)

Počnimo s definicijom provedbe Odgovor sučelje:

klasa CustomAnswer implementira Odgovor {@Override javni logički odgovor (InvocationOnMock pozivanje) baca Throwable {return false; }}

The CustomAnswer klasa gore koristi se za generiranje lažne slike:

MyList listMock = lažno (MyList.class, novi CustomAnswer ());

Ako ne postavimo očekivanje metode, zadani odgovor koji je konfigurirao CustomAnswer tipa, ući će u igru. Da bismo to dokazali, preskočit ćemo korak postavljanja očekivanja i prijeći na izvršenje metode:

logička vrijednost dodana = listMock.add (randomAlphabetic (6));

Sljedeća provjera i tvrdnja potvrđuju da je oponašanje metoda s an Odgovor argument je funkcionirao kako se očekivalo:

verify (listMock) .add (anyString ()); assertThat (dodano, je (netačno));

5. Ruganje sa MockSettings

Konačni oponašanje Metoda koja je obrađena u ovom članku je varijanta s parametrom MockSettings tip. Ova preopterećena metoda koristi se za pružanje nestandardne lažne slike.

Postoji nekoliko prilagođenih postavki koje su podržane metodama MockSettings sučelje, poput registracije slušatelja za pozive metoda na trenutnom lažnom invocationListeners, konfiguriranje serializacije sa serializirati, navodeći instancu za špijuniranje spiedInstance, konfigurirajući Mockito da pokuša koristiti konstruktor prilikom instanciranja mock-a sa useConstructori neki drugi.

Radi praktičnosti ponovno ćemo koristiti CustomAnswer razred predstavljen u prethodnom odjeljku za stvaranje a MockSettings implementacija koja definira zadani odgovor.

A MockSettings objekt je instanciran tvorničkom metodom kako slijedi:

MockSettings customSettings = withSettings (). DefaultAnswer (novi CustomAnswer ());

Taj će se objekt postavljanja koristiti za izradu novog lažnog:

MyList listMock = lažno (MyList.class, customSettings);

Slično prethodnom odjeljku, pozvat ćemo i dodati metoda a MyList instance i provjerite da a oponašanje metoda s a MockSettings argument djeluje onako kako je zamišljen pomoću sljedećeg isječka koda:

logička vrijednost dodana = listMock.add (randomAlphabetic (6)); verify (listMock) .add (anyString ()); assertThat (dodano, je (netačno));

6. Zaključak

Ovaj je vodič obuhvatio oponašanje metoda Mockita u detalje. Implementacija ovih primjera i isječaka koda može se naći u projektu GitHub.


$config[zx-auto] not found$config[zx-overlay] not found