Khi sử dụng các trình kết hợp đối số mockito một cách rộng rãi, có một số cân nhắc về hiệu suất để ghi nhớ. Mặc dù Mockito nói chung là hiệu quả, việc sử dụng rộng rãi các trình kết hợp đối số có thể giới thiệu một số chi phí do cách Mockito xử lý các trình kết hợp này.
1. Chi phí xử lý khớp **
- Đánh giá của trình kết hợp đối số: Khi bạn sử dụng các trình kết hợp đối số như `eq ()`, `any ()` hoặc `AnyString ()`, Mockito cần đánh giá các trình kết hợp này trong thời gian chạy. Quá trình đánh giá này có thể giới thiệu một chi phí nhẹ so với việc truyền trực tiếp các giá trị chính xác. Tuy nhiên, chi phí này thường không đáng kể trừ khi bạn đang xử lý một số lượng rất lớn các lời mời hoặc người kết hợp phức tạp.2. Quy tắc kết hợp của người mai mối **
- Tất cả các đối số phải sử dụng trình kết hợp: Nếu bạn sử dụng trình kết hợp đối số cho một đối số, tất cả các đối số phải sử dụng trình mai thành. Quy tắc này có thể dẫn đến nhiều mã dài dòng hơn và có khả năng chi phí cao hơn nếu bạn sử dụng trình mai mối cho tất cả các đối số khi chỉ có một điều kiện cụ thể. Ví dụ: nếu một phương thức có ba tham số và bạn muốn sử dụng `bất kỳ ()` nào cho một trong số chúng, bạn cũng phải sử dụng trình chỉnh sửa cho hai người kia, ngay cả khi bạn có thể sử dụng các giá trị chính xác.3. Trình kết hợp tùy chỉnh **
- Logic phức tạp: Mặc dù Mockito cung cấp một loạt các trình kết hợp tích hợp, bạn có thể cần tạo trình kết hợp tùy chỉnh cho logic cụ thể. Người kết hợp tùy chỉnh có thể tốn kém hơn về mặt tính toán nếu chúng liên quan đến logic hoặc hoạt động phức tạp. Điều này là do họ yêu cầu triển khai giao diện `armingMatcher` và xác định phương thức` matches () `có thể thực hiện kiểm tra tùy ý.4. Chi phí xác minh **
- Xác minh với các trình chỉnh sửa: Khi xác minh các tương tác với các đối tượng giả bằng cách sử dụng `xác minh ()`, Mockito cũng sử dụng trình chỉnh sửa để kiểm tra xem các đối số chính xác có được truyền không. Tương tự như stubbing, xác minh với các trình chỉnh sửa có thể giới thiệu một số chi phí, đặc biệt nếu bạn đang xác minh nhiều cuộc gọi với các trình mai mối phức tạp.5. Thực tiễn tốt nhất cho hiệu suất **
- Sử dụng tính đặc hiệu một cách khôn ngoan: Sử dụng các trình chỉnh sửa với mức độ đặc hiệu phù hợp. Ví dụ: `anyint ()` ít cụ thể hơn và nhanh hơn `eq (4)`, nhưng sử dụng `eq (4)` khi bạn cần xác minh một giá trị cụ thể là chính xác hơn và không ảnh hưởng đáng kể đến hiệu suất.- Tránh sự phức tạp không cần thiết: Tránh sử dụng các trình kết hợp tùy chỉnh trừ khi cần thiết. Nếu một bài kiểm tra yêu cầu logic phức tạp để phù hợp với các đối số, hãy xem xét đơn giản hóa thử nghiệm hoặc sử dụng các trình kết hợp hiện có một cách sáng tạo.
- Hồ sơ các bài kiểm tra của bạn: Nếu bạn nhận thấy các vấn đề về hiệu suất trong các bài kiểm tra của mình, hãy hồ sơ chúng để xác định tắc nghẽn. Thật hiếm khi các trình chỉnh sửa Mockito là nguyên nhân chính của các vấn đề hiệu suất đáng kể, nhưng luôn luôn tốt để xác minh.
Tóm lại, trong khi các trình kết hợp đối số Mockito giới thiệu một số chi phí, thì đây thường không phải là một mối quan tâm đáng kể trừ khi bạn đang xử lý các bài kiểm tra cực kỳ phức tạp hoặc hiệu suất quan trọng. Những lợi ích của việc sử dụng các trình mai mối như tính linh hoạt và rõ ràng trong mã kiểm tra thường vượt xa chi phí hiệu suất nhỏ.
Trích dẫn:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-patchers/
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.AdditionalMatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-use-argument-matcher-or-passing-argument-directly-when-mockito-uni