Mock statická metóda pomocou JMockit

1. Prehľad

Niektoré populárne zosmiešňujúce knižnice, ako napríklad Mockito a Easymock, generujú modely pomocou makier triedy Java na základe dedičnosti. EasyMock implementuje rozhranie za behu, zatiaľ čo Mockito dedí z cieľovej triedy na vytvorenie posmešného pahýľa.

Ani jeden prístup nefunguje dobre pre statické metódy, pretože statické metódy sú spojené s triedou a nemožno ich prepísať. Avšak JMockit poskytuje funkcie posmievania statickou metódou.

V tomto tutoriáli preskúmame niektoré z týchto funkcií.

Úvod do JMockitu nájdete v našom predchádzajúcom článku.

2. Maven závislosti

Začnime so závislosťami Maven:

 org.jmockit jmockit 1,24 test 

Najnovšie verzie týchto knižníc nájdete na serveri Maven Central.

3. Statická metóda zvaná nestatická metóda

Najprv zvážime prípad, keď máme trieda s nestatickou metódou, ktorá vnútorne závisí od statickej metódy:

public class AppManager {public boolean managerResponse (reťazcová otázka) {return AppManager.isResponsePositive (otázka); } public static boolean isResponsePositive (String value) {if (value == null) {return false; } int dlzka = hodnota.lenka (); int randomNumber = randomNumber (); dĺžka návratu == randomNumber? pravda lož; } private static int randomNumber () {return new Random (). nextInt (7); }}

Teraz chceme metódu otestovať managerResponse (). Pretože jeho návratová hodnota závisí od inej metódy, musíme sa vysmievať isResponsePositive () metóda.

Túto statickú metódu môžeme zosmiešniť pomocou JMockit anonymná trieda mockit.MockUp.MockUp (kde T bude názov triedy) a @Mock anotácia:

@Test public void givenAppManager_whenStaticMethodCalled_thenValidateExectedResponse () {new MockUp () {@Mock public boolean isResponsePositive (hodnota reťazca) {return false; }}; assertFalse (appManager.managerResponse ("Niektorý reťazec ...")); }

Tu sa vysmievame isResponsePositive () s návratovou hodnotou, ktorú by sme chceli použiť na test. Preto overenie očakávaného výsledku pomocou Tvrdenia nástroj dostupný v Junit-5.

4. Vyskúšajte súkromnú statickú metódu

V niekoľkých prípadoch iné metódy používajú súkromné ​​statické metódy triedy:

private static Integer stringToInteger (String num) {return Integer.parseInt (num); }

Na testovanie tejto metódy potrebovali by sme sa posmievať súkromnej statickej metóde. Môžeme použiť Deencapsulation.invoke () užitočná metóda poskytovaná JMockit:

@Test public void givenAppManager_whenPrivateStaticMethod_thenValidateExectedResponse () {int response = Deencapsulation.invoke (AppManager.class, "stringToInteger", "110"); assertEquals (110, odpoveď); }

Ako už názov napovedá, jeho účelom je dekapsulovať stav objektu. Týmto spôsobom JMockit zjednodušuje testovacie metódy, ktoré by sa inak nedali otestovať.

5. Záver

V tomto článku sme videli, ako sa dajú statické metódy vysmievať JMockit. Ak sa chcete podrobnejšie oboznámiť s niektorými pokročilými funkciami JMockit, pozrite si náš článok Pokročilé použitie JMockit.

Celý zdrojový kód tohto tutoriálu je ako obvykle k dispozícii na GitHub.


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