Powermock dan Mockito keduanya digunakan untuk mengejek di Java, tetapi mereka melayani tujuan yang berbeda dan memiliki fitur yang berbeda, terutama dalam cara mereka menangani mengejek melalui implementasi `mockmaker` masing -masing.
pembuat tiruan Powermock
Powermock memperluas perpustakaan tiruan lainnya seperti Easymock dan Mockito dengan memberikan kemampuan yang lebih kuat. Ini menggunakan classloader kustom dan manipulasi bytecode untuk memungkinkan mengejek metode statis, konstruktor, kelas akhir dan metode, metode pribadi, dan penghapusan inisialisasi statis [4] [9]. `Mockmaker` Powermock diimplementasikan oleh kelas` PowerMockMaker`, yang mendelegasikan panggilan ke `mockmaker` lain jika diperlukan. Ini memungkinkan PowerMock bekerja bersama kerangka mengejek lainnya tanpa konflik, asalkan dikonfigurasi dengan benar [7].
Pendekatan Powermock lebih invasif, membutuhkan manipulasi bytecode untuk mencapai kemampuan mengejeknya yang canggih. Ini dapat bermanfaat untuk skenario kompleks di mana mockito saja tidak mencukupi, seperti mengejek metode statis atau metode pribadi [9].
###-mockito's mock-maker-inline
`Mock-Maker-Inline` Mockito adalah fitur yang diperkenalkan untuk memungkinkan mengejek kelas dan metode akhir. Itu tidak memerlukan manipulasi bytecode seperti PowerMock tetapi sebaliknya menggunakan API instrumentasi Java untuk memodifikasi kelas saat runtime. Pendekatan ini kurang invasif dan tidak memerlukan classloader kustom [2] [8].
Untuk mengaktifkan `Mock-Maker-Inline`, Anda biasanya menambahkan file bernama` org.mockito.plugins.mockmaker` dengan konten `mock-maker-inline` di direktori` src/test/sumber daya/mockito-extensions`. Atau, Anda dapat menggunakan artefak `mockito-inline`, yang menyederhanakan proses dengan tidak memerlukan konfigurasi manual file ekstensi` mockmaker` [2] [10].
Mockito 5.0.0 dan versi yang lebih baru menggunakan `Mock-Maker-Inline` sebagai pembuat tiruan default, membuatnya lebih mudah untuk mengejek kelas dan metode akhir tanpa konfigurasi tambahan [3] [10].
Perbedaan utama
-Invasiveness: PowerMock lebih invasif karena penggunaan manipulasi bytecode dan classloader khusus, sementara `mock-pembuat mockito mockito menggunakan instrumentasi java, yang kurang invasif.
- Kemampuan: Powermock dapat mengejek metode statis, konstruktor, dan metode pribadi, yang tidak dapat dilakukan oleh Mockito tanpa alat tambahan seperti `mockito-inline` untuk kelas dan metode akhir.
-Konfigurasi: PowerMock memerlukan konfigurasi spesifik untuk mendelegasikan ke implementasi `mockmaker` lainnya, sedangkan` mock-pembuat mock-inline` Mockito dapat diaktifkan dengan file konfigurasi sederhana atau dengan menggunakan artefak `mockito-inline`.
-Perilaku default: Dalam Mockito 5 dan yang lebih baru, `Mock-Maker-Inline` adalah default, sedangkan PowerMock selalu membutuhkan pengaturan eksplisit untuk menggunakan fitur canggihnya.
Singkatnya, sementara baik Powermock dan `mock-pembuat mock-inline` meningkatkan kemampuan mengejek, mereka berbeda secara signifikan dalam pendekatan, invasif, dan jenis mengejek yang mereka dukung. Powermock lebih kuat tetapi juga lebih kompleks, sedangkan `mock-pembuat mock-inline` Mockito menawarkan cara yang lebih sederhana untuk mengejek kelas dan metode akhir.
Kutipan:[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-between-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-advisor/selenium/classes/org.mockito.plugins.mockmaker
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.api.mockito.mockmaker.powermockmaker
[8] https://davidvlijmincx.com/posts/mockito_mock_final_methods_and_classses/
[9] https://stackoverflow.com/questions/6036450/powermock-mockito-vs-mockito-alone
[10] https://stackoverflow.com/questions/53274463/what-is-mockito-inline-and-how-does-it-work-to-mock-final-Methods