Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Чи є якісь міркування щодо ефективності при широкому використанні аргументів Mockito


Чи є якісь міркування щодо ефективності при широкому використанні аргументів Mockito


Коли використовується аргумент Mockito, широко відповідає, є кілька міркувань, які слід пам’ятати. Хоча Mockito, як правило, ефективний, широке використання аргументів може ввести деякі накладні витрати через те, як Mockito обробляє цих відповідей.

1. Обробка відповідності **

- Оцінка відповідності аргументів: Коли ви використовуєте відповідність аргументів, такі як `eq ()`, `` будь -який () `` `` ryString () `, Mockito повинен оцінити цих матчів під час виконання. Цей процес оцінювання може ввести незначні накладні витрати порівняно з точними значеннями. Однак ця накладна, як правило, незначна, якщо ви не маєте справу з дуже великою кількістю викликів або складними відповідями.

2. Правила комбінації відповідності **

- Усі аргументи повинні використовувати відповідники: Якщо ви використовуєте відповідність аргументу для одного аргументу, всі аргументи повинні використовувати відповідники. Це правило може призвести до більш багатослівного коду та потенційно більш накладного, якщо ви використовуєте відповідність для всіх аргументів, коли лише одна потребує конкретної умови. Наприклад, якщо метод має три параметри, і ви хочете використовувати `будь -який ()` для одного з них, ви повинні використовувати відповідність і для інших двох, навіть якщо ви могли використовувати точні значення.

3. Спеціальні відповідники **

- Складна логіка: Хоча Mockito забезпечує широкий спектр вбудованих збігачів, можливо, вам доведеться створити спеціальні відповідники для конкретної логіки. Спеціальні відповідники можуть бути більш обчислювально дорогими, якщо вони включають складну логіку чи операції. Це тому, що вони потребують впровадження інтерфейсу `argumentMatcher` та визначення методу` Matches (), який може виконувати довільні чеки.

4. Перевірка накладних **

- Перевірка з матчами: Під час перевірки взаємодій з макетними об'єктами за допомогою `Перевірка ()` Мокто також використовує відповідність, щоб перевірити, чи були прийняті правильні аргументи. Подібно до заглушки, перевірка з відповідями може ввести деякі накладні витрати, особливо якщо ви перевіряєте кілька дзвінків зі складними відповідями.

5. Найкращі практики продуктивності **

- Використовуйте специфічність розумно: використовуйте відповідники з правильним рівнем специфічності. Наприклад, `Anyint ()` менш специфічний і швидший, ніж `eq (4)`, але використання `eq (4)` Коли вам потрібно перевірити, що конкретне значення є більш точним і не суттєво впливає на продуктивність.
- Уникайте непотрібної складності: Уникайте користувальницьких відповідних відповідів, якщо це не потрібно. Якщо тест вимагає складної логіки для відповідності аргументів, розгляньте спрощення тесту або використання існуючих відповідних відповідей.
- Профільні тести: Якщо ви помічаєте проблеми з продуктивністю у своїх тестах, профілю їх, щоб визначити вузькі місця. Рідко Moctito Matchers є основною причиною значних проблем з ефективністю, але це завжди добре перевірити.

Підсумовуючи це, хоча Mockito Argument Matchers вводить деякі накладні витрати, це, як правило, не є суттєвим занепокоєнням, якщо ви не маєте справу з надзвичайно складними або критичними для ефективності тестів. Переваги використання матчів, таких як гнучкість та чіткість у тестовому коді, зазвичай переважають незначні витрати на ефективність.

Цитати:
[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-dectly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockitoargument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[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
4