Mengatasi Cabaran Mockito: Mengejek Panggilan Kaedah daripada Superclass
Mockito, rangka kerja mengejek Java, menyediakan alat yang berkuasa untuk mengasingkan panggilan kaedah semasa ujian. Walau bagaimanapun, senario tertentu memerlukan hanya mengejek panggilan tertentu, terutamanya apabila berurusan dengan warisan.
Pertimbangkan hierarki kelas berikut:
<code class="java">class BaseService { public void save() {...} } public Childservice extends BaseService { public void save(){ //some code super.save(); } } </code>
Matlamatnya adalah untuk mengejek hanya panggilan ke super.save( ) dalam kelas ChildService, meninggalkan penyeruan kaedah asal untuk panggilan pertama.
Satu pendekatan melibatkan secara strategik menggunakan kaedah pengintip() Mockito untuk mencipta olok-olok kelas ChildService. Dengan menepis kaedah validate() kelas BaseService, yang dipanggil dalam super.save(), kami menghalang panggilan kaedah yang tidak diingini dengan berkesan:
<code class="java">class BaseService { public void validate(){ fail(" I must not be called"); } public void save(){ //Save method of super will still be called. validate(); } } class ChildService extends BaseService{ public void load(){} public void save(){ super.save(); load(); } } @Test public void testSave() { ChildService classToTest = Mockito.spy(new ChildService()); // Prevent/stub logic in super.save() Mockito.doNothing().when((BaseService)classToTest).validate(); // When classToTest.save(); // Then verify(classToTest).load(); }</code>
Pendekatan ini mengasingkan panggilan ke super.save( dengan berkesan. ) sambil membenarkan permohonan kaedah asal untuk panggilan pertama. Ia memastikan bahawa ujian memberi tumpuan khusus pada kaedah yang diingini dalam penelitian.
Atas ialah kandungan terperinci Cara Mengejek Panggilan Kaedah daripada Superclass dengan Mockito: Panduan Praktikal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!