PowerMock ve Mockito, Java'da alay etmek için kullanılır, ancak farklı amaçlara hizmet ederler ve özellikle ilgili `` mockmaker 'uygulamalarıyla alay ettiklerini nasıl ele aldıkları konusunda farklı özelliklere sahiptirler.
PowerMock'un Mockmaker
PowerMock, daha güçlü yetenekler sağlayarak EasyMock ve Mockito gibi diğer sahte kütüphaneleri genişletir. Statik yöntemlerin, yapıcıların, son sınıfların ve yöntemlerin, özel yöntemlerin ve statik başlatıcıların kaldırılmasını sağlamak için özel bir sınıf yükleyici ve bayt kodu manipülasyonu kullanır [4] [9]. PowerMock'un `` mockmaker '', gerekirse başka bir `mockmaker 'çağrısını delege eden` powerMockmaker' sınıfı tarafından uygulanır. Bu, PowerMock'un doğru yapılandırılması koşuluyla çatışmadan diğer alaycı çerçevelerin yanında çalışmasına izin verir [7].
PowerMock'un yaklaşımı daha invazivdir ve gelişmiş alay etme yeteneklerini elde etmek için bayt kodu manipülasyonu gerektirir. Bu, mockito'nun tek başına statik yöntemler veya özel yöntemler gibi yetersiz olduğu karmaşık senaryolar için faydalı olabilir [9].
Mockito'nun Mock-Maker-Inline
Mockito'nun `` Mock-Maker-Inline '', son sınıfların ve yöntemlerin alay edilmesine izin vermek için tanıtılan bir özelliktir. PowerMock gibi bayt kodu manipülasyonu gerektirmez, bunun yerine çalışma zamanında sınıfları değiştirmek için Java'nın Enstrümantasyon API'sını kullanır. Bu yaklaşım daha az invazivdir ve özel bir sınıflandırıcıya ihtiyaç duymaz [2] [8].
`` Mock-Maker-Inline '' i etkinleştirmek için, genellikle `org.mockito.plugins.mockmaker` adlı bir dosya eklersiniz. Alternatif olarak, `` Mockito-inline '' artefaktı kullanabilirsiniz, bu da `` Mockmaker '' uzatma dosyasının manuel yapılandırmasını gerektirmeyerek işlemi basitleştirebilirsiniz [2] [10].
Mockito 5.0.0 ve sonraki sürümler, varsayılan sahte yapımcı olarak `` Mock-Maker-Inline '' kullanır ve ek yapılandırma olmadan son sınıfları ve yöntemleri taklit etmeyi kolaylaştırır [3] [10].
Anahtar Farklılıklar
-İnvazivlik: PowerMock, bayt kodu manipülasyonu ve özel bir sınıf yükleyici kullanımı nedeniyle daha invazivdir, Mockito'nun `` Mock-Maker-Inline 'daha az invaziv olan Java enstrümantasyonunu kullanır.
- Yetenekler: PowerMock, Mockito'nun son sınıflar ve yöntemler için `` Mockito-inline '' gibi ek araçlar olmadan yapamayacağı statik yöntemleri, yapıcıları ve özel yöntemleri alay edebilir.
-Yapılandırma: PowerMock, diğer `mockmaker 'uygulamalarına delege etmek için özel yapılandırma gerektirirken, Mockito'nun` `Mock-Maker-Inline' 'basit bir yapılandırma dosyasıyla veya` Mockito-Inline' artefaktı kullanılarak etkinleştirilebilir.
-Varsayılan Davranış: Mockito 5 ve üstünde, `` Mock-Maker-Inline '' varsayılandır, oysa PowerMock her zaman gelişmiş özelliklerini kullanmak için açık bir kurulum gerektirir.
Özetle, hem PowerMock hem de Mockito'nun `` Mock-Maker-Inline '' alay özelliklerini geliştirirken, yaklaşımlarında, invazivliklerinde ve destekledikleri alay türlerinde önemli ölçüde farklılık gösterirler. PowerMock daha güçlü fakat aynı zamanda daha karmaşıktır, oysa Mockito'nun `` Mock-Maker-In-Line ', final sınıfları ve yöntemleri taklit etmek için daha basit bir yol sunar.
Alıntılar:[1] https://github.com/powermock/powermock/wiki/mockito
[2] https://davidvlijmincx.com/posts/writing_higher_quality_tests_with_mockitos_inline_mock_maker/
[3] https://stackoverflow.com/questions/65986197/difference-beton-mockito-core-vs-mockito-inline
[4] https://powermock.github.io
[5] https://javadoc.io/static/org.mockito/mockito-core/3.2.4/org/mockito/plugins/inlinemockmaker.html
[6] https://www.lambdatest.com/automation-testing-dvisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-dvisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classes/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-onone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-does-it-work-to-mock-final metodları