Ismijavanje statičke metode pomoću JMockita

1. Pregled

Neke popularne podrugljive knjižnice poput Mockito i Easymock generiraju makete iskorištavajući Java-ov model klase zasnovan na nasljeđivanju. EasyMock implementira sučelje za vrijeme izvođenja, dok Mockito nasljeđuje od ciljne klase kako bi stvorio podrugljiv štih.

Nijedan pristup ne funkcionira dobro za statičke metode jer su statičke metode povezane s klasom i ne mogu se nadjačati. Međutim, JMockit pruža statične značajke ruganja.

U ovom uputstvu istražit ćemo neke od ovih značajki.

Uvod u JMockit potražite u našem prethodnom članku.

2. Ovisnosti Mavena

Počnimo s Mavenovim ovisnostima:

 org.jmockit jmockit 1,24 test 

Najnovije verzije ovih knjižnica možete pronaći na Maven Central.

3. Statička metoda koja se poziva iz nestatičke metode

Prvo, razmotrimo slučaj koji imamo klasa s nestatičnom metodom koja interno ovisi o statičkoj metodi:

javna klasa AppManager {javni boolean managerResponse (pitanje niza) {return AppManager.isResponsePositive (pitanje); } javni statički logički isResponsePositive (vrijednost niza) {if (vrijednost == null) {return false; } int dužina = vrijednost.duljina (); int randomNumber = randomNumber (); povratna dužina == randomBroj? točno netočno; } private static int randomNumber () {return new Random (). nextInt (7); }}

Sada želimo testirati metodu managerResponse (). Budući da njegova povratna vrijednost ovisi o drugoj metodi, moramo se rugati isResponsePositive () metoda.

Ovu statičku metodu možemo ismijati koristeći JMockit's anonimni razred mockit.MockUp.MockUp (gdje će T biti naziv klase) i @Oponašanje napomena:

@Test public void givenAppManager_whenStaticMethodCalled_thenValidateExpectedResponse () {new MockUp () {@Mock public boolean isResponsePositive (String value) {return false; }}; assertFalse (appManager.managerResponse ("Neki niz ...")); }

Evo, mi se rugamo isResponsePositive () s povratnom vrijednošću koju bismo željeli koristiti za test. Stoga, provjeravanje očekivanog rezultata pomoću Tvrdnje uslužni program dostupan u Junit-5.

4. Testirajte privatnu statičku metodu

U nekoliko slučajeva druge metode koriste privatne statičke metode klase:

privatni statički cijeli broj stringToInteger (niz niza) {return Integer.parseInt (num); }

Za ispitivanje takve metode, trebali bismo se rugati privatnoj statičkoj metodi. Možemo koristiti Deencapsulation.invoke () korisna metoda koju pruža JMockit:

@Test javna praznina givenAppManager_whenPrivateStaticMethod_thenValidateExpectedResponse () {int response = Deencapsulation.invoke (AppManager.class, "stringToInteger", "110"); assertEquals (110, odgovor); }

Kao što i samo ime govori, svrha je da dekapsulirati stanje predmeta. Na taj način JMockit pojednostavljuje metode ispitivanja koje se inače ne bi mogle testirati.

5. Zaključak

U ovom smo članku vidjeli kako se statičke metode mogu rugati JMockit. Za detaljniji uvid u neke napredne značajke JMockita, pogledajte naš članak o naprednoj upotrebi JMockita.

Kao i obično, puni izvorni kod za ovaj vodič nalazi se na GitHub-u.


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