Mockito strogo stubiranje i nepotrebno izbacivanje

1. Pregled

U ovom brzom vodiču naučit ćemo o Mockitu NepotrebnoStubbingException. Ova je iznimka jedna od čestih iznimki s kojima ćemo se vjerojatno susresti pri pogrešnoj upotrebi stubova.

Započet ćemo objašnjavanjem filozofije koja stoji iza strogog zapinjanja i zašto Mockito potiče njegovu upotrebu prema zadanim postavkama. Dalje ćemo pogledati što tačno znači ova iznimka i pod kojim okolnostima se može dogoditi. Za kraj ćemo vidjeti primjer kako u svojim testovima možemo suzbiti tu iznimku.

Da biste saznali više o testiranju s Mockitom, pogledajte našu sveobuhvatnu Mockito seriju.

2. Strogo bušenje

S verzijom 1.x Mockita bilo je moguće konfigurirati i komunicirati s mockovima bez ikakvih ograničenja. To je značilo da će s vremenom testovi često postati prekomplicirani i ponekad teže otkloniti pogreške.

Od verzije 2. +, Mockito je predstavio nove značajke koje pomiču okvir prema "strogosti". Glavni ciljevi koji stoje iza toga su:

  • Otkrijte neiskorištene mrlje u testnom kodu
  • Smanjite dupliciranje testnog koda i nepotrebnog testnog koda
  • Promovirajte čišće testove uklanjanjem "mrtvog" koda
  • Pomozite poboljšati otklanjanje pogrešaka i produktivnost

Slijeđenje ovih načela pomaže nam u stvaranju čistijih testova uklanjanjem nepotrebnog testnog koda. Oni također pomažu u izbjegavanju pogrešaka pri kopiranju i lijepljenju, kao i drugim previdima za programere.

Da rezimiramo, strogo rezanje prijavljuje nepotrebne probleme, otkriva neusklađenost argumenata i čini naše testove SUŠIM (nemojte se ponavljati). To omogućuje čistu i održivu bazu kodova.

2.1. Konfiguriranje strogih stubova

Od Mockito 2. +, strogo poticanje koristi se prema zadanim postavkama kada se inicijaliziraju mockovi koristeći bilo što od:

  • MockitoJUnitRunner
  • MockitoJUnit.rule ()

Mockito toplo preporučuje upotrebu bilo kojeg od gore navedenih. Međutim, postoji i drugi način da omogućimo strogo zagrizanje u našim testovima kada ne koristimo Mockito pravilo ili pokretač:

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

Posljednja važna stvar koju treba istaknuti je da će u Mockito 3.0 sva klina biti "stroga" i prema zadanim postavkama provjerena.

3. NepotrebnoStubbingException Primjer

Jednostavno rečeno, nepotrebni klip je klatni poziv metode koji nikada nije realiziran tijekom izvođenja testa.

Pogledajmo jednostavan primjer:

@Test javna praznina givenUnusedStub_whenInvokingGetThenThrowUnpotrearyStubbingException () {when (mockList.add ("one")). ThenReturn (true); // ovo se neće pozvati kada (mockList.get (anyInt ())). thenReturn ("hello"); assertEquals ("Popis treba sadržavati zdravo", "zdravo", mockList.get (1)); }

Kad pokrenemo ovaj jedinični test, Mockito će otkriti neiskorišteni škrtić i baciti NepotrebnoStubbingException:

org.mockito.exceptions.misusing.UnmunearyStubbingException: Otkriveni su nepotrebni udarci Čist i održiv testni kod zahtijeva nula nepotrebnih kodova. Sljedeći stubbings su nepotrebni (kliknite za navigaciju na relevantnim linija koda): 1. -> na com.baeldung.mockito.misusing.MockitoUnecessaryStubUnitTest.givenUnusedStub_whenInvokingGetThenThrowUnnecessaryStubbingException (MockitoUnecessaryStubUnitTest.java:37) Uklonite nepotrebne stubbings ili koristite „blaže” strogosti. Više informacija: javadoc za klasu NepotrebnoStubbingException.

Srećom, iz poruke o pogrešci sasvim je jasno u čemu je problem. Također možemo vidjeti da nas poruka o iznimci čak usmjerava na točnu liniju koja uzrokuje pogrešku.

Zašto se to događa? Pa, prva kada invokacija konfigurira naš mock za povratak pravi kad nazovemo dodati metoda s argumentom "jedan". Međutim, tada se ne pozivamo na ovu metodu tijekom ostatka izvršenja jediničnog testa.

Mockito nam govori da je naš prvi kada linija je suvišna i možda smo pogriješili prilikom konfiguriranja kvara.

Iako je ovaj primjer trivijalan, lako se može zamisliti kada se podsmjehujete složenoj hijerarhiji objekata kako ovakva poruka može pomoći u otklanjanju pogrešaka i na drugi način biti od velike pomoći.

4. Zaobilazeći strogo bušenje

Konačno, pogledajmo kako zaobići stroge klice. To je također poznato kao popustljivo trljanje.

Ponekad trebamo konfigurirati određeni otvrdnjavanje tako da bude blago, a da se pritom zadrže svi ostali prigrizci i izrugivanja kako bismo koristili strogo prebacivanje:

@Test javna praznina givenLenientdStub_whenInvokingGetThenThrowUnpotrearyStubbingException () {lenient (). When (mockList.add ("one")). ThenReturn (true); kada (mockList.get (anyInt ())). thenReturn ("zdravo"); assertEquals ("Popis treba sadržavati zdravo", "zdravo", mockList.get (1)); }

U gornjem primjeru, koristimo statičku metodu Mockito.lenient () kako bi se omogućilo blago popuštanje na dodati metoda našeg lažnog popisa.

Blagi udarci zaobilaze pravila provjere valjanosti „strogih stubova“. Primjerice, kada se probijanje proglasi blagim, neće se provjeravati potencijalni problemi s zapinjanjem, poput nepotrebnog prebacivanja prethodno opisanog.

5. Zaključak

U ovom kratkom članku započeli smo uvođenjem koncepta strogog zapinjanja u Mockitu i razumjeli filozofiju zašto je uveden i zašto je važan.

Dalje, pogledali smo primjer NepotrebnoStubbingException prije završetka s primjerom kako u našim testovima omogućiti blago popuštanje.

Kao i uvijek, puni izvorni kôd članka dostupan je na GitHub-u.


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