Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito argüman eşleştiricilerini yoğun bir şekilde kullanırken herhangi bir performans düşüncesi var mı?


Mockito argüman eşleştiricilerini yoğun bir şekilde kullanırken herhangi bir performans düşüncesi var mı?


Mockito argüman eşleştiricilerini kapsamlı bir şekilde kullanırken, akılda tutulması gereken birkaç performans hususu vardır. Mockito genellikle verimli olsa da, argüman eşleştiricilerinin kapsamlı kullanımı, Mockito'nun bu eşleştiricileri işleme şekli nedeniyle bazı ek yük getirebilir.

1. Matcher Tepesi İşleme **

- Argüman Eşleme Değerlendirmesi: `Eq ()` `` `` () `veya` anystring () 'gibi argüman eşleştiricileri kullandığınızda, Mockito'nun bu eşleştiricileri çalışma zamanında değerlendirmesi gerekir. Bu değerlendirme işlemi, kesin değerleri doğrudan geçirmeye kıyasla hafif bir ek yük getirebilir. Bununla birlikte, çok sayıda çağırma veya karmaşık eşleme ile uğraşmadığınız sürece, bu yük tipik olarak ihmal edilebilir.

2. Matcher kombinasyon kuralları **

- Tüm bağımsız değişkenler eşleştiricileri kullanmalıdır: Bir argüman için bir bağımsız değişken kullanıyorsanız, tüm argümanlar eşleştiricileri kullanmalıdır. Bu kural, yalnızca biri belirli bir duruma ihtiyaç duyduğunda tüm argümanlar için eşleştiriciler kullanıyorsanız, daha ayrıntılı kod ve potansiyel olarak daha fazla ek yüke yol açabilir. Örneğin, bir yöntemin üç parametresi varsa ve bunlardan biri için `(herhangi bir ()` kullanmak istiyorsanız, tam değerleri kullanmış olsanız bile, diğer ikisi için eşleştiricileri de kullanmalısınız.

3. Özel eşleştiriciler **

- Karmaşık mantık: Mockito çok çeşitli yerleşik eşleştiriciler sağlarken, belirli mantık için özel eşleştiriciler oluşturmanız gerekebilir. Özel eşleştiriciler, karmaşık mantık veya işlemler içeriyorsa daha hesaplama açısından pahalı olabilir. Bunun nedeni, `` argumentMatcher '' arayüzünün uygulanmasını ve keyfi kontroller gerçekleştirebilen bir `eşleşme ()` yöntemi tanımlamasını gerektirmeleridir.

4. Doğrulama Tepesi **

- Eşleştiricilerle doğrulama: `verify ()` kullanarak sahte nesnelerle etkileşimleri doğrularken, Mockito da doğru bağımsız değişkenlerin geçip geçmediğini kontrol etmek için eşleştiricileri de kullanır. Saplamaya benzer şekilde, eşleştiricilerle doğrulama, özellikle karmaşık eşleştiricilerle birden fazla çağrıyı doğrulıyorsanız, bazı ek yük getirebilir.

5. Performans için En İyi Uygulamalar **

- Özgüllüğü akıllıca kullanın: Doğru özgüllük seviyesine sahip eşleştiriciler kullanın. Örneğin, `` Anyint () `` EQ (4) 'den daha az spesifik ve daha hızlıdır, ancak belirli bir değeri doğrulamanız gerektiğinde `EQ (4)' kullanılması daha kesindir ve performansı önemli ölçüde etkilemez.
- Gereksiz karmaşıklıktan kaçının: Gerekmedikçe özel eşleştiricileri kullanmaktan kaçının. Bir test argümanları eşleştirmek için karmaşık mantık gerektiriyorsa, testi basitleştirmeyi veya mevcut eşleştiricileri yaratıcı bir şekilde kullanmayı düşünün.
- Testlerinizi Profesyonelleştirin: Testlerinizdeki performans sorunlarını fark ederseniz, darboğazları tanımlamak için bunları profilleyin. Mockito eşleştiricilerinin önemli performans sorunlarının birincil nedeni olması nadirdir, ancak doğrulamak her zaman iyidir.

Özetle, Mockito argüman eşleştiricileri biraz ek yük getirirken, son derece karmaşık veya performans açısından kritik testlerle uğraşmadığınız sürece bu genellikle önemli bir endişe değildir. Test kodunda esneklik ve netlik gibi eşleştiricileri kullanmanın faydaları genellikle küçük performans maliyetlerinden daha ağır basar.

Alıntılar:
[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-catcher-vs-passing-string-inectly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-catchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-catchers/
[5] https://www.toptal.com/java/a-guide-to-emveryday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-dvisor/selenium/classes/org.mockito.additionalmatchers
[8] https://stackoverflow.com/questions/73046134/when-should-iuse-argument-catcher-or-passing-argument-enectly-when-mockito-uni