Bộ xử lý Mockito đã kiểm tra và không được kiểm soát các ngoại lệ khác nhau, chủ yếu là do cách Java xử lý các ngoại lệ này và cách Mockito được thiết kế để hoạt động với chữ ký phương pháp.
Đã kiểm tra ngoại lệ
- Định nghĩa: Các ngoại lệ được kiểm tra là các ngoại lệ được kiểm tra tại thời điểm biên dịch. Chúng phải bị bắt trong một khối `try-catch` hoặc được khai báo trong chữ ký phương thức bằng cách sử dụng từ khóa` ném` [3].
- Xử lý Mockito: Mockito cho phép ném các ngoại lệ được kiểm tra từ một đối tượng giả chỉ khi ngoại lệ được khai báo trong chữ ký phương thức. Nếu bạn cố gắng ném một ngoại lệ đã kiểm tra không được khai báo, Mockito sẽ ném một `mockitoexception` với một thông báo cho biết ngoại lệ được kiểm tra không hợp lệ cho phương pháp đó [1] [2]. Ví dụ: nếu một phương thức `void somemethod () ném ioException`, bạn có thể sử dụng mockito để ném` ioexception` mà không gặp vấn đề gì.
Các ngoại lệ không được kiểm soát
- Định nghĩa: Các ngoại lệ không được kiểm soát là các trường hợp ngoại lệ không được kiểm tra tại thời điểm biên dịch. Chúng thường là các ngoại lệ hoặc lỗi thời gian chạy biểu thị lỗi lập trình [3].
- Xử lý Mockito: Mockito có thể dễ dàng xử lý các trường hợp ngoại lệ không được kiểm soát mà không có bất kỳ hạn chế nào. Bạn có thể sử dụng `thenthrow ()` hoặc `Dothrow ()` để mô phỏng các ngoại lệ không được kiểm soát như `RunTimeException` hoặc` nullPulumException` mà không cần chúng được khai báo trong chữ ký phương thức [1] [2]. Điều này làm cho việc kiểm tra xử lý lỗi cho các điều kiện bất ngờ.
Giải pháp cho các trường hợp ngoại lệ đã kiểm tra
Nếu bạn cần ném một ngoại lệ đã kiểm tra không được khai báo trong chữ ký phương thức, bạn có thể sử dụng phương thức `doanswer ()` của Mockito. Phương pháp này cho phép bạn xác định hành vi tùy chỉnh cho một phương thức giả, bao gồm các ngoại lệ ném không được khai báo trong chữ ký phương thức [4]. Tuy nhiên, phương pháp này đòi hỏi phải xử lý thủ công hơn và thường ít đơn giản hơn so với sử dụng `thenthrow ()` hoặc `Dothrow ()`.
Tóm lại, việc xử lý các trường hợp ngoại lệ được kiểm tra của Mockito sẽ hạn chế hơn vì nó tuân thủ kiểm tra thời gian biên dịch của Java, trong khi các trường hợp ngoại lệ không được kiểm soát có thể được ném tự do, giúp chúng dễ sử dụng hơn trong các thử nghiệm.
Trích dẫn:[1] https://blog.sammkinng.in/blogs/checked-exception-is-invalid-for-this-method
[2] https://www.toptal.com/java/a-guide-to-everyday-mockito
.
[4] https://stackoverflow.com/questions/3762047/throw-checked-exceptions-from-mocks-with-mockito
[5] https://stackoverflow.com/questions/38852392/mockito-difference-between-thenthrowexception-class-and-thenthrownew-excepti
.
[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