Panggilan Kaedah Spesifik Mengejek dalam Superclass dengan Mockito
Dalam senario ujian, mungkin perlu mengejek hanya panggilan kaedah tertentu dalam superclass sementara memelihara tingkah laku asal orang lain. Ini boleh dicapai menggunakan keupayaan mengejek fleksibel Mockito.
Pertimbangkan hierarki kelas berikut:
<code class="java">class BaseService { public void save() {...} } class ChildService extends BaseService { public void save() { // Custom logic super.save(); } }</code>
Dalam contoh ini, kami mahu mengejek hanya panggilan ke super.save() dalam ChildService sambil membenarkan pelaksanaan asal save() dalam BaseService dilaksanakan.
Untuk mencapai ini, kita boleh menggunakan fungsi pengintip untuk mencipta proksi ChildService:
<code class="java">ChildService classToTest = Mockito.spy(new ChildService());</code>
Seterusnya, kami perlu stub tingkah laku super.save() dalam konteks ChildService. Walau bagaimanapun, kerana super merujuk kepada kelas BaseService dalam ChildService, kami perlu menghantar classToTest ke BaseService sebelum menggunakan Mockito.doNothing().
<code class="java">Mockito.doNothing().when((BaseService)classToTest).validate();</code>
Dengan memotong kaedah validate() BaseService, kami menghalang dengan berkesan ia daripada dipanggil semasa ujian. Akibatnya, hanya panggilan super.save() dalam ChildService akan dipintas oleh olok-olok.
Untuk melengkapkan ujian, kita kini boleh memanggil save() pada classToTest dan menegaskan bahawa logik yang dijangkakan dalam ChildService dilaksanakan:
<code class="java">classToTest.save(); verify(classToTest).load();</code>
Pendekatan ini membolehkan kami mengejek panggilan kaedah tertentu secara selektif dalam superclass sambil mengekalkan kefungsian kaedah yang diwarisi. Ia terbukti berharga dalam situasi yang mengubah suai hierarki kelas atau kod pemfaktoran semula tidak boleh dilaksanakan.
Atas ialah kandungan terperinci Bagaimana untuk mengejek Panggilan Kaedah Khusus dalam Superclass dengan Mockito?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!