Mockito Strict Stubbing a The UnitablearyStubbingException

1. Prehľad

V tomto rýchlom výučbe sa dozvieme niečo o Mockito Zbytočná výnimka z inzercie. Táto výnimka je jednou z bežných výnimiek, s ktorými sa pravdepodobne stretneme pri nesprávnom použití stubov.

Začneme vysvetlením filozofie prísneho tvrdého zaobchádzania a toho, prečo Mockito predvolene podporuje jeho použitie. Ďalej sa pozrieme na to, čo presne táto výnimka znamená a za akých okolností môže nastať. Na záver uvidíme príklad toho, ako môžeme túto výnimku potlačiť v našich testoch.

Ak sa chcete dozvedieť viac informácií o testovaní pomocou aplikácie Mockito, pozrite si našu komplexnú sériu Mockito.

2. Prísne zatĺkanie

S verziou 1.x Mockito bolo možné konfigurovať a interagovať s falošnými správami bez obmedzenia. To znamenalo, že v priebehu času budú testy často príliš komplikované a niekedy bude náročnejšie ich odladiť.

Od verzie 2. +, Mockito zavádza nové funkcie, ktoré posúvajú rámec k „prísnosti“. Hlavnými cieľmi sú:

  • Zistite v testovacom kóde nepoužívané pahýle
  • Znížte duplikáciu testovacieho kódu a nepotrebný testovací kód
  • Podporujte čistšie testy odstránením „mŕtveho“ kódu
  • Pomôžte zlepšiť laditeľnosť a produktivitu

Dodržiavanie týchto zásad nám pomáha vytvárať čistejšie testy vylúčením nepotrebného testovacieho kódu. Pomáhajú tiež predchádzať chybám kopírovania a vkladania a ďalším dohľadom vývojárov.

Stručne zhrnuté, prísne stubbing hlási nepotrebné stuby, detekuje nesúlad argumentov stubbing a robí naše testy viac SUCHÉ (Don't Repeat Yourself). To umožňuje čistý a udržiavateľný základ kódu.

2.1. Konfigurácia prísnych prístupov

Od verzie Mockito 2. + sa pri inicializácii našich vzoriek pomocou predvoleného nastavenia predvolene používa prísne stubbing:

  • MockitoJUnitRunner
  • MockitoJUnit.rule ()

Mockito dôrazne odporúča použitie niektorého z vyššie uvedených. Existuje však aj ďalší spôsob, ako v našich testoch povoliť prísne bránenie, keď nepoužívame pravidlo Mockito alebo bežca:

Mockito.mockitoSession () .initMocks (this) .strictness (Strictness.STRICT_STUBS) .stMMocking (); 

Posledným dôležitým bodom, ktorý je potrebné urobiť, je, že v aplikácii Mockito 3.0 budú všetky identifikácie útokov „prísne“ a budú predvolene overené.

3. Zbytočná výnimka z inzercie Príklad

Zjednodušene povedané, nepotrebný stub je stubbed volanie metódy, ktoré sa nikdy nerealizovalo počas vykonávania testu.

Pozrime sa na jednoduchý príklad:

@Test public void givenUnusedStub_whenInvokingGetThenThrowUn NeedaryStubbingException () {when (mockList.add ("one")). ThenReturn (true); // toto sa nebude volať when (mockList.get (anyInt ())). thenReturn ("ahoj"); assertEquals ("Zoznam by mal obsahovať ahoj", "ahoj", mockList.get (1)); }

Keď spustíme tento jednotkový test, Mockito zistí nepoužitý pahýľ a hodí an Zbytočná výnimka z inzercie:

org.mockito.exceptions.misusing.Un neededaryStubbingException: Zistilo sa zbytočné zneužitie. Čistý a udržiavateľný testovací kód vyžaduje nulový nepotrebný kód. Nasledujúce útržky nie sú potrebné (kliknutím prejdete na príslušný riadok kódu): 1. -> na adrese com.baeldung.mockito.misusing.MockitoU NeedaryStubUnitTest.givenUnusedStub_whenInvokingGetThenThrowUn NeedaryStubbingException (MockitoU NeedaryStubUnitTest.java:37) prosím odstráňte nepotrebné útržky. Len prosím odstráňte nepotrebné útržky. Ďalšie informácie: javadoc pre triedu Un NeedaryStubbingException.

Našťastie je z chybovej správy úplne zrejmé, v čom je problém. Vidíme tiež, že správa o výnimke nás dokonca nasmeruje na presný riadok, ktorý chybu spôsobuje.

Prečo sa to stalo? No prvý kedy vyvolanie nakonfiguruje náš falošný návrat pravda keď voláme pridať metóda s argumentom „Jeden“. Túto metódu však potom nevyvoláme počas zvyšku vykonania jednotkového testu.

Mockito nám hovorí, že náš prvý kedy linka je nadbytočná a možno sme urobili chybu pri konfigurácii našich stubov.

Aj keď je tento príklad triviálny, pri zosmiešňovaní zložitej hierarchie objektov je ľahké si predstaviť, ako tento druh správy môže pomôcť pri ladení a inak je veľmi užitočný.

4. Obchádzanie prísneho zatĺkania

Na záver sa pozrime, ako obísť prísne pahýle. Toto je tiež známe ako zhovievavé stubbing.

Niekedy musíme nakonfigurovať konkrétne pahýly, aby boli zhovievavé, zatiaľ čo zachovávame všetky ostatné pahýly a falošné správy, aby sme používali striktné pahýly:

@ Test public void givenLenientdStub_whenInvokingGetThenThrowUn NeedaryStubbingException () {lenient (). When (mockList.add ("one")). ThenReturn (true); kedy (mockList.get (anyInt ())). thenReturn ("ahoj"); assertEquals ("Zoznam by mal obsahovať ahoj", "ahoj", mockList.get (1)); }

Vo vyššie uvedenom príklade používame statickú metódu Mockito.lenient () umožniť zhovievavé pichnutie na pridať metóda nášho falošného zoznamu.

Mierni pahýly obchádzajú pravidlá overovania „prísneho pichnutia“. Napríklad, keď je stubbing vyhlásený za zhovievavý, nebude sa kontrolovať, či nedochádza k potenciálnym problémom s stubbingom, ako je napríklad zbytočné stubbing popísané vyššie.

5. Záver

V tomto krátkom článku sme začali predstavením konceptu prísneho zatĺkania v aplikácii Mockito a pochopili sme filozofiu, ktorá stojí za tým, prečo bola zavedená a prečo je to dôležité.

Ďalej sme sa pozreli na príklad Zbytočná výnimka z inzercie pred dokončením ukážkou toho, ako v našich testoch povoliť zhovievavé stubbing.

Celý zdrojový kód článku je ako vždy k dispozícii na GitHub.


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