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