Whitebox PowerMock dan Mockito's Whitebox adalah kelas utilitas yang digunakan untuk mengakses dan memanipulasi keadaan kelas internal, tetapi mereka memiliki perbedaan yang berbeda dalam asal -usul, fungsi, dan konteks penggunaannya.
Asal dan Ketersediaan
- Whitebox Mockito: Ini adalah kelas internal dalam mockito yang memungkinkan pengguna untuk mengatur keadaan internal objek. Namun, itu dihapus dari Mockito 2.x karena kekhawatiran tentang mempromosikan praktik pengujian yang buruk dan karena itu tidak dimaksudkan untuk penggunaan publik [11]. Pengguna yang mengandalkannya didorong untuk beralih ke alternatif seperti Whitebox PowerMock atau menerapkan utilitas refleksi mereka sendiri [3].
- PowerMock's Whitebox: Ini adalah bagian dari Perpustakaan Powermock, yang memperluas kemampuan Mockito dengan memungkinkan mengejek metode pribadi, statis, dan akhir, di antara fitur -fitur lainnya [5]. PowerMock's Whitebox menyediakan utilitas refleksi yang disederhanakan yang dimaksudkan untuk pengujian, memungkinkan akses ke anggota pribadi dan doa metode pribadi [2] [6].
fungsionalitas
- Whitebox Mockito (Historis): Sebelum penghapusannya, Whitebox Mockito memungkinkan pengguna untuk mengatur keadaan internal objek menggunakan metode seperti `setinternalstate`. Ini berguna untuk menyuntikkan tiruan ke dalam kelas tanpa setter publik.
- Powermock's Whitebox: menawarkan serangkaian fungsionalitas yang lebih luas, termasuk:
- Mengakses anggota pribadi: Metode seperti `getinternalstate` memungkinkan pengambilan nilai lapangan pribadi.
- Memanggil Metode Pribadi: Metode `InvokeMethod` dapat memanggil metode pribadi, termasuk yang statis [4] [10].
- Mengatur bidang pribadi: Meskipun tidak didokumentasikan secara eksplisit, Whitebox PowerMock dapat digunakan untuk mengatur bidang pribadi melalui refleksi, meskipun ini bukan tujuan utamanya.
Konteks penggunaan ##
- Mockito's Whitebox: Karena tidak lagi tersedia di Mockito 2.x, pengguna disarankan untuk menggunakan alternatif seperti PowerMock Whitebox atau `reflectionTestutils` Spring's jika berlaku [1] [3].
- PowerMock's Whitebox: biasanya digunakan dalam skenario di mana akses langsung ke anggota atau metode pribadi diperlukan, seringkali dalam kode warisan atau saat menguji logika kompleks yang tidak dapat dengan mudah direfaktor. Namun, umumnya disarankan untuk menghindari penggunaan utilitas tersebut kecuali benar -benar diperlukan, karena mereka dapat mem -bypass enkapsulasi dan menyebabkan tes rapuh [10].
Singkatnya, sementara kedua utilitas Whitebox melayani tujuan yang sama, versi Powermock lebih komprehensif dan tersedia secara luas, sedangkan versi Mockito telah dihapus karena kekhawatiran tentang praktik pengujian. Powermock's Whitebox adalah alat yang ampuh untuk mengakses dan memanipulasi negara kelas internal tetapi harus digunakan dengan bijaksana.
Kutipan:[1] https://stackoverflow.com/questions/40280918/what-do-i-suse-instead-of-whitebox-in-mockito-2-2-to-set-fields
[2] https://www.javadoc.io/doc/org.powermock/powermock-reflect/1.6.5/org/powermock/reflect/whiteBox.html
[3] https://proandroiddev.com/mockito-2-x-over-powermock-migration-tips-and-tricks-top-ten-18c52abd1d8
[4] https://johnmullins.co
[5] https://www.calsoftinc.com/blogs/unit-testing-mockito-powermockito.html
[6] https://www.javadoc.io/doc/org.powermock/powermock-reflect/latest/org/powermock/reflect/whiteBox.html
[7] https://github.com/mockito/mockito/issues/422
[8] https://www.alibabacloud.com/blog/598057
[9] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.powermock.reflect.whiteBox
[10] https://github.com/powermock/powermock/wiki/bypass-encapsulation
[11] https://github.com/mockito/mockito/issues/489
[12] https://code.haleby.se/2017/02/03/a-case-for-powermock/