Phương thức `reset ()` của Mockito là một tính năng cho phép bạn đặt lại một đối tượng giả để nó có thể được sử dụng lại. Tuy nhiên, việc sử dụng nó thường không được các nhà phát triển và người dùng Mockito nản lòng, vì nó có thể chỉ ra các thử nghiệm hoặc mã được thiết kế kém quá phức tạp và khó kiểm tra rõ ràng [7] [9]. Thay vào đó, cách tiếp cận được đề xuất là tạo các chế độ giả mới cho mỗi phương pháp thử nghiệm để đảm bảo tính độc lập và rõ ràng trong thử nghiệm [7] [9].
So sánh với các thư viện chế giễu khác
1. Điều này có nghĩa là JMock2 không yêu cầu thiết lập lại rõ ràng như Mockito [10]. Cách tiếp cận của JMock2 giúp duy trì sự cô lập kiểm tra mà không cần thiết lập lại giả theo cách thủ công.
2. Easymock: Easymock cũng thường không yêu cầu phương pháp đặt lại. Nó được thiết kế để tạo ra các đối tượng giả mới cho mỗi thử nghiệm, tương tự như thực tiễn được đề xuất với Mockito. Szczepan Faber, một nhà phát triển Mockito, đề cập rằng anh ta không bao giờ cần một tính năng đặt lại trong khi sử dụng Easymock [8].
3. Mockito so với các thư viện khác: Nói chung, các thư viện chế giễu khác như JMock2 và Easymock thúc đẩy phương pháp thử nghiệm sạch hơn bằng cách tự động quản lý trạng thái giả hoặc khuyến khích tạo ra các chế độ giả mới cho mỗi thử nghiệm. Phương thức `reset ()` của Mockito là một ngoại lệ hơn là tiêu chuẩn trong các khung chế nhạo.
Thực tiễn tốt nhất
- Tránh sử dụng `reset ()`: Trừ khi thực sự cần thiết, chẳng hạn như khi giả được bơm bởi một thùng chứa và không thể được tái tạo cho mỗi thử nghiệm, nên tránh sử dụng `reset ()`. Thay vào đó, hãy tập trung vào việc tạo các bài kiểm tra đơn giản, tập trung với các chế độ giả mới cho mỗi kịch bản [7] [9].
- Sử dụng `ClearInvocations ()`: Nếu bạn cần xóa các tương tác mà không cần đặt lại stubbing, hãy sử dụng `ClearInvocations ()`. Phương pháp này cho phép bạn bảo tồn việc sơ khai trong khi xóa mọi tương tác được ghi lại, có thể hữu ích trong một số kịch bản nhất định [5].
- Mã tái cấu trúc cho khả năng kiểm tra: Nếu bạn thấy mình cần sử dụng `reset ()` thường xuyên, nó có thể chỉ ra rằng mã của bạn có thể được hưởng lợi từ việc tái cấu trúc để làm cho nó dễ kiểm tra hơn. Điều này có thể liên quan đến việc phá vỡ các phương pháp phức tạp hoặc cải thiện tiêm phụ thuộc [9].
Tóm lại, trong khi Mockito cung cấp phương thức `reset ()`, việc sử dụng nó thường không được khuyến khích để tạo ra các giả mới cho mỗi thử nghiệm. Các thư viện chế giễu khác thường thúc đẩy các thực tiễn tương tự, nhấn mạnh các thử nghiệm sạch và độc lập đối với quản lý giả phức tạp.
Trích dẫn:[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://groups.google.com/g/mockito/c/y_ihdc8lx_m
[3] https://www.vogella.com/tutorials/mockito/article.html
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.Mockito.reset
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://www.jrebel.com/blog/mock-unit-testing-with-mockito
[7] https://stackoverflow.com/questions/34412106/appropriate-use-of-mockito-reset
[8] https://groups.google.com/g/mockito/c/_vxg33tlzl8
[9] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-appropriate-use-of-mockitos-reset-method
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito