Mockito จัดการกับข้อยกเว้นที่ตรวจสอบและไม่ถูกตรวจสอบแตกต่างกันเป็นหลักเนื่องจากวิธีการที่ Java ปฏิบัติต่อข้อยกเว้นเหล่านี้และวิธีการที่ Mockito ได้รับการออกแบบมาเพื่อทำงานกับลายเซ็นวิธี
ตรวจสอบข้อยกเว้น
- คำจำกัดความ: ข้อยกเว้นที่ตรวจสอบเป็นข้อยกเว้นที่ตรวจสอบในเวลาคอมไพล์ พวกเขาจะต้องติดอยู่ในบล็อก `try-catch` หรือประกาศในลายเซ็นวิธีการโดยใช้คำหลัก` throws '[3]
- การจัดการ Mockito: Mockito อนุญาตให้โยนข้อยกเว้นตรวจสอบจากวัตถุจำลองเฉพาะในกรณีที่มีการประกาศข้อยกเว้นในลายเซ็นวิธี หากคุณพยายามที่จะโยนข้อยกเว้นที่ตรวจสอบที่ไม่ได้ประกาศ Mockito จะโยน `mockitoexception` ด้วยข้อความที่ระบุว่าข้อยกเว้นที่ตรวจสอบนั้นไม่ถูกต้องสำหรับวิธีนั้น [1] [2] ตัวอย่างเช่นหากวิธี `โมฆะ somemethod () พ่น Ioexception` คุณสามารถใช้ mockito เพื่อโยน` ioexception` โดยไม่มีปัญหา
ข้อยกเว้นที่ไม่ได้ตรวจสอบ
- คำจำกัดความ: ข้อยกเว้นที่ไม่ได้ตรวจสอบเป็นข้อยกเว้นที่ไม่ได้ตรวจสอบในเวลาคอมไพล์ โดยทั่วไปแล้วจะเป็นข้อยกเว้นรันไทม์หรือข้อผิดพลาดที่ระบุข้อผิดพลาดในการเขียนโปรแกรม [3]
- การจัดการ Mockito: Mockito สามารถจัดการข้อยกเว้นที่ไม่ได้ตรวจสอบได้อย่างง่ายดายโดยไม่มีข้อ จำกัด ใด ๆ คุณสามารถใช้ `thenthrow ()` หรือ `dothrow ()` เพื่อจำลองข้อยกเว้นที่ไม่ได้ตรวจสอบเช่น `runtimeException` หรือ` nullpointerexception` โดยไม่ต้องประกาศให้พวกเขาถูกประกาศในลายเซ็นของวิธี [1] [2] สิ่งนี้ทำให้ตรงไปตรงมาเพื่อทดสอบการจัดการข้อผิดพลาดสำหรับเงื่อนไขที่ไม่คาดคิด
workarounds สำหรับข้อยกเว้นที่ตรวจสอบ
หากคุณต้องการโยนข้อยกเว้นที่ตรวจสอบซึ่งไม่ได้ประกาศในลายเซ็นวิธีการคุณสามารถใช้วิธี `doanswer ()` ของ Mockito วิธีนี้ช่วยให้คุณสามารถกำหนดพฤติกรรมที่กำหนดเองสำหรับวิธีการเยาะเย้ยรวมถึงการโยนข้อยกเว้นที่ไม่ได้ประกาศในลายเซ็นวิธี [4] อย่างไรก็ตามวิธีการนี้ต้องการการจัดการด้วยตนเองมากขึ้นและโดยทั่วไปจะตรงไปตรงมาน้อยกว่าการใช้ `thenthrow ()` หรือ `dothrow ()`
โดยสรุปการจัดการข้อยกเว้นที่ตรวจสอบของ Mockito นั้นมีข้อ จำกัด มากขึ้นเนื่องจากเป็นไปตามการตรวจสอบเวลารวบรวมของ Java ในขณะที่ข้อยกเว้นที่ไม่ได้ตรวจสอบสามารถโยนได้อย่างอิสระทำให้ใช้งานง่ายในการทดสอบ
การอ้างอิง:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-his-method
[2] https://www.toptal.com/java/a-guide-to-ereryday-mockito
[3] https://rollbar.com/blog/how-to-handle-checked-enched-exceptions-in-java/
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-between-thenthrowexception-lass-and-thenthrownew-excepti
[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-hrow-exception