Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Có bất kỳ cạm bẫy phổ biến nào khi chế giễu ngoại lệ với Mockito


Có bất kỳ cạm bẫy phổ biến nào khi chế giễu ngoại lệ với Mockito


Khi sử dụng Mockito để chế giễu các ngoại lệ, một số cạm bẫy phổ biến có thể làm cho các bài kiểm tra của bạn kém hiệu quả hơn hoặc khó duy trì hơn. Dưới đây là một số cạm bẫy này và làm thế nào để tránh chúng:

1. Khai thác quá mức **

Một trong những cạm bẫy quan trọng nhất là quá chế. Điều này xảy ra khi bạn chế giễu quá nhiều phụ thuộc, dẫn đến các thử nghiệm mong manh và khó duy trì. Việc chế giễu quá mức có thể khiến các thử nghiệm tập trung nhiều hơn vào các chế giễu hơn là hành vi thực tế của hệ thống được thử nghiệm. Để tránh điều này, tập trung vào việc chỉ chế giễu các cộng tác viên có hành vi không tầm thường hoặc những người có tương tác bạn muốn xác minh. Sử dụng các trường hợp thực cho sự hợp tác đơn giản [3].

2. Ngoại lệ không hợp lệ **

Mockito đảm bảo rằng ngoại lệ được ném là hợp lệ cho phương pháp stubbed cụ thể. Nếu bạn cố gắng ném một ngoại lệ không có trong danh sách ngoại lệ được kiểm tra của phương thức, Mockito sẽ phàn nàn. Ví dụ: nếu một phương thức không tuyên bố `ioexception`, cố gắng chế giễu nó để ném` ioException` sẽ dẫn đến lỗi [1]. Luôn đảm bảo rằng ngoại lệ bị chế giễu là hợp lệ cho phương thức.

3. Sử dụng `thenthrow ()` với các phương thức void **

`Khi (). Thenthrow ()` không thể được sử dụng với các phương thức void vì không có giá trị trả về để giả. Thay vào đó, hãy sử dụng `Dothrow ()` cho các phương thức Void. Trộn các phương pháp này không chính xác có thể dẫn đến lỗi [2].

4. Thiếu tính đặc hiệu **

Khi chế giễu các ngoại lệ, điều quan trọng là phải cụ thể về những ngoại lệ bạn đang thử nghiệm. Tránh chế nhạo quá mức bằng cách tập trung vào các ngoại lệ liên quan đến kịch bản thử nghiệm. Điều này giúp giữ cho các bài kiểm tra tập trung và duy trì [2] [8].

5. Xử lý thực thi không chính xác **

Đảm bảo rằng mã ứng dụng được chuẩn bị để xử lý các ngoại lệ một cách chính xác, ngay cả khi bị chế giễu trong các thử nghiệm. Điều này bao gồm kiểm tra logic để xử lý các ngoại lệ để đảm bảo nó hoạt động như mong đợi [2].

6. Sử dụng các thông báo lỗi có ý nghĩa **

Khi chế giễu các ngoại lệ, bao gồm các thông điệp có ý nghĩa để giúp chẩn đoán các vấn đề nếu các xét nghiệm thất bại. Thực tiễn này giúp tăng cường sự rõ ràng và hiệu quả của các bài kiểm tra của bạn [2].

7. Kiểm tra logic xử lý ngoại lệ **

Đảm bảo rằng mã xử lý các ngoại lệ như mong đợi. Điều này liên quan đến việc xác minh rằng ứng dụng hoạt động chính xác khi các ngoại lệ được ném, điều này rất quan trọng để xây dựng các ứng dụng phục hồi [2].

8. Đặt lại và xóa Mocks **

Mockito cung cấp các tính năng như `reset ()` và `ClearInvocations ()` để quản lý giả. Tuy nhiên, những điều này nên được sử dụng một cách tiết kiệm. Đặt lại một giả chỉ nên được thực hiện trong các trường hợp hiếm hoi, chẳng hạn như khi một continer được tiêm bởi một container và không thể được tái tạo cho mỗi thử nghiệm. Xóa các yêu cầu có thể hữu ích nếu việc tái tạo một giả sẽ dẫn đến chi phí đáng kể [1].

Bằng cách nhận thức được những cạm bẫy này và tuân theo các thực tiễn tốt nhất, bạn có thể sử dụng hiệu quả Mockito để chế giễu các ngoại lệ và đảm bảo các bài kiểm tra của bạn mạnh mẽ và có thể duy trì.

Trích dẫn:
[1] https://www.toptal.com/java/a-guide-to-everyday-mockito
[2] https://www.browserstack.com/guide/mockito-throw-exception
[3] https://javanexus.com/blog/avoiding-mockito-testing-pitfalls
[4] https://stackoverflow.com/questions/9186604/mockito-exception-when-requires-an-argument-which-has-to-be-a-method-call-on
[5] https://stackoverflow.com/questions/22540108/best-practices-with-mockito
[6] https://stackoverflow.com/questions/52512548/mock-method-to-do-not-throw-an-exception/52514628
[7] https://contributors.scala-lang.org/t/mockito-testing-nulls-and-exceptions/3915
[8] https://www.janbasktraining.com/community/java/throw-checked-exceptions-from-mocks-with-mockito