Trình kết hợp đối số Mockito là các công cụ mạnh mẽ được sử dụng trong thử nghiệm đơn vị để chỉ định linh hoạt các đối số khi thiết lập giả. Tuy nhiên, họ đi kèm với một số hạn chế:
1. Bối cảnh sử dụng: Trình kết hợp đối số chỉ có thể được sử dụng trong bối cảnh các phương thức sơ khai hoặc xác minh. Chúng không thể được sử dụng khi gọi các phương thức trên đối tượng được kiểm tra. Chẳng hạn, bạn không thể sử dụng `AnyString ()` khi gọi một phương thức trên một đối tượng thực; Thay vào đó, bạn nên sử dụng giá trị cụ thể [1] [5].
2. Tính nhất quán trên các đối số: Khi sử dụng trình kết hợp đối số cho một đối số, tất cả các đối số khác cũng phải sử dụng trình mai mối. Bạn không thể trộn các trình kết hợp với các giá trị cụ thể cho các đối số khác nhau trong cùng một cuộc gọi phương thức. Đây là một nguồn phổ biến của `InvaliduseofMatcherSexception` [7] [8].
3. Giới hạn chế giễu: Mockito không thể chế giễu một số phương thức nhất định như `bằng ()`, `hashcode ()` hoặc các phương thức cuối cùng. Mặc dù các trình kết hợp đối số có thể được sử dụng với các phương thức có thể bị chế giễu, nhưng chúng không mở rộng khả năng chế giễu các phương pháp bị hạn chế này [3].
4. Các loại Matcher đối số: Mockito cung cấp nhiều trình kết hợp đối số tích hợp (ví dụ: `anyint ()`, `AnyString ()`, `isnull ()`), nhưng bạn phải chọn loại chính xác cho đối số. Ví dụ: sử dụng `bất kỳ ()` với loại nguyên thủy có thể không hoạt động như mong đợi; Thay vào đó, hãy sử dụng một trình kết hợp cụ thể hơn như `anyboolean ()` cho các tham số boolean [7].
5. Trình kết hợp đối số tùy chỉnh: Mặc dù mockito cho phép bạn tạo trình kết hợp tùy chỉnh bằng phương thức `argthat ()`, việc triển khai giao diện `armingMatcher` đòi hỏi phải xem xét cẩn thận để đảm bảo trình khớp hoạt động như mong đợi trong các kịch bản khác nhau [2] [4].
6. Tích hợp với các thư viện khác: Khi sử dụng Mockito với các thư viện khác như Hamcrest, hãy đảm bảo rằng việc tích hợp được xử lý đúng cách. Ví dụ, Sonarqube có thể gắn cờ một số cách sử dụng nhất định của `argthat ()` với các trình mai mối Hamcrest là không chính xác, ngay cả khi chúng có giá trị [4].
Tóm lại, trong khi các trình kết hợp đối số Mockito là linh hoạt, việc sử dụng của họ bị giới hạn trong các bối cảnh cụ thể và yêu cầu tính nhất quán giữa các đối số phương thức. Ngoài ra, họ không khắc phục những hạn chế cơ bản của Mockito về các phương pháp hoặc lớp nhất định.
Trích dẫn:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-matchers-in-case-of-usage-mockitohamcrest-adapter/38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.ArgumentMatchers.isNull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-patchers