Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Apakah ada pertimbangan kinerja saat menggunakan pencocokan argumen mockito secara luas


Apakah ada pertimbangan kinerja saat menggunakan pencocokan argumen mockito secara luas


Saat menggunakan pencocokan argumen mockito secara luas, ada beberapa pertimbangan kinerja yang perlu diingat. Sementara mockito umumnya efisien, penggunaan yang luas dari pencocokan argumen dapat memperkenalkan beberapa overhead karena cara Mockito memproses pencocokan ini.

1. Overhead pemrosesan pencocokan **

- Evaluasi Pencocokan Argumen: Ketika Anda menggunakan pencocokan argumen seperti `eq ()`, `any ()`, atau `anystring ()`, mockito perlu mengevaluasi pencocokan ini saat runtime. Proses evaluasi ini dapat memperkenalkan sedikit overhead dibandingkan dengan melewati nilai yang tepat secara langsung. Namun, overhead ini biasanya diabaikan kecuali Anda berurusan dengan sejumlah besar doa atau pencocokan kompleks.

2. Aturan kombinasi pencocokan **

- Semua argumen harus menggunakan pencocokan: Jika Anda menggunakan pencocokan argumen untuk satu argumen, semua argumen harus menggunakan pencocokan. Aturan ini dapat menyebabkan lebih banyak kode verbose dan berpotensi lebih banyak overhead jika Anda menggunakan pencocokan untuk semua argumen ketika hanya satu yang membutuhkan kondisi tertentu. Misalnya, jika suatu metode memiliki tiga parameter dan Anda ingin menggunakan `any ()` untuk salah satunya, Anda harus menggunakan pencocokan untuk dua lainnya juga, bahkan jika Anda dapat menggunakan nilai yang tepat.

3. Pencocokan khusus **

- Logika Kompleks: Sementara Mockito menyediakan berbagai pencocokan bawaan, Anda mungkin perlu membuat pencocokan khusus untuk logika tertentu. Pencocokan khusus bisa lebih mahal secara komputasi jika melibatkan logika atau operasi yang kompleks. Ini karena mereka memerlukan penerapan antarmuka `argumentMatcher` dan mendefinisikan metode` kecocokan () `yang dapat melakukan pemeriksaan sewenang -wenang.

4. Verifikasi overhead **

- Verifikasi dengan pencocokan: Saat memverifikasi interaksi dengan objek tiruan menggunakan `verify ()`, mockito juga menggunakan pencocokan untuk memeriksa apakah argumen yang benar dilewatkan. Mirip dengan bertengger, verifikasi dengan pencocokan dapat memperkenalkan beberapa overhead, terutama jika Anda memverifikasi beberapa panggilan dengan pencocokan yang kompleks.

5. Praktik terbaik untuk kinerja **

- Gunakan spesifisitas dengan bijak: Gunakan pencocokan dengan tingkat spesifisitas yang tepat. Misalnya, `anyint ()` kurang spesifik dan lebih cepat dari `eq (4)`, tetapi menggunakan `eq (4)` ketika Anda perlu memverifikasi nilai spesifik lebih tepat dan tidak berdampak signifikan secara signifikan.
- Hindari kompleksitas yang tidak perlu: hindari menggunakan pencocokan khusus kecuali diperlukan. Jika tes membutuhkan logika yang kompleks untuk mencocokkan argumen, pertimbangkan untuk menyederhanakan tes atau menggunakan pencocokan yang ada secara kreatif.
- Profil Tes Anda: Jika Anda melihat masalah kinerja dalam tes Anda, profil mereka untuk mengidentifikasi hambatan. Jarang pertandingan mockito menjadi penyebab utama masalah kinerja yang signifikan, tetapi selalu baik untuk diverifikasi.

Singkatnya, sementara pencocokan argumen mockito memang memperkenalkan beberapa overhead, ini umumnya bukan masalah yang signifikan kecuali Anda berurusan dengan tes yang sangat kompleks atau kritis kinerja. Manfaat menggunakan pencocokan seperti fleksibilitas dan kejelasan dalam kode uji biasanya lebih besar daripada biaya kinerja kecil.

Kutipan:
[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-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
[8] https://stackoverflow.com/questions/73046134/when-should--sus-argument-batcher-or-passing-argument-directly-when-mockito- uni