Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan håndterer Mockito kontrollerede undtagelser forskelligt fra ukontrollerede undtagelser


Hvordan håndterer Mockito kontrollerede undtagelser forskelligt fra ukontrollerede undtagelser


Mockito håndterer kontrollerede og ukontrollerede undtagelser forskelligt, primært på grund af, hvordan Java behandler disse undtagelser, og hvordan Mockito er designet til at arbejde med metodesignaturer.

Kontrollerede undtagelser

- Definition: Kontrollerede undtagelser er undtagelser, der kontrolleres på kompileringstidspunktet. De skal enten blive fanget i en "Try-Catch" -blok eller erklæret i metodesignaturen ved hjælp af "kast" nøgleord [3].
- Mockito Håndtering: Mockito tillader kun at kaste kontrollerede undtagelser fra et mock -objekt, hvis undtagelsen er erklæret i metodesignaturen. Hvis du forsøger at kaste en kontrolleret undtagelse, der ikke er erklæret, vil Mockito kaste en `MockitoException 'med en meddelelse, der angiver, at den kontrollerede undtagelse er ugyldig for denne metode [1] [2]. For eksempel, hvis en metode 'void somemethod () kaster IOException', kan du bruge Mockito til at kaste en 'ioException' uden problemer.

Ukontrollerede undtagelser

- Definition: Ukontrollerede undtagelser er undtagelser, der ikke kontrolleres på kompileringstidspunktet. De er typisk runtime -undtagelser eller fejl, der angiver programmeringsfejl [3].
- Mockito -håndtering: Mockito kan let håndtere ukontrollerede undtagelser uden nogen begrænsninger. Du kan bruge `thenthrow ()` eller `dothrow ()` til at simulere ukontrollerede undtagelser som `runtimeException 'eller` nullPointerException' uden at have brug for dem til at blive erklæret i metodesignaturen [1] [2]. Dette gør det ligetil at teste fejlhåndtering for uventede forhold.

Løsninger til kontrollerede undtagelser

Hvis du har brug for at kaste en kontrolleret undtagelse, der ikke er erklæret i metodesignaturen, kan du bruge Mockitos 'DoASwer ()' metode. Denne metode giver dig mulighed for at definere brugerdefineret opførsel til en mock -metode, herunder kaste undtagelser, der ikke er erklæret i metodesignaturen [4]. Imidlertid kræver denne tilgang mere manuel håndtering og er generelt mindre ligetil end at bruge `Thenthrow ()` eller `dothrow ()`.

Sammenfattende er Mockitos håndtering af kontrollerede undtagelser mere restriktiv, fordi det overholder Java's kompileringstidskontrol, mens ikke-markerede undtagelser kan kastes frit, hvilket gør dem lettere at bruge i test.

Citater:
[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-veryday-mockito
)
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
)
[6] https://www.reddit.com/r/java/comments/1cct4iq/if_everyone_hates_checked_exceptions_wheres_the/
[7] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito
[8] https://www.youtube.com/watch?v=6-gj2w2ycmi
[9] https://www.browserstack.com/guide/mockito-throw-exception