Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengejek Hanya Panggilan Kaedah Tertentu dalam Superclass dengan Mockito?

Bagaimana untuk Mengejek Hanya Panggilan Kaedah Tertentu dalam Superclass dengan Mockito?

Patricia Arquette
Patricia Arquetteasal
2024-10-31 06:17:021045semak imbas

How to Mock Only a Specific Method Call in a Superclass with Mockito?

Mengejek Hanya Panggilan Kaedah Tertentu dalam Superclass dengan Mockito

Apabila menjalankan ujian unit menggunakan Mockito, anda mungkin perlu mengejek hanya yang tertentu panggilan ke kaedah dalam superclass sambil membiarkan panggilan lain tidak terjejas. Pertimbangkan senario berikut:

<code class="java">class BaseService {  
    public void save() {...}  
}

public Childservice extends BaseService {  
    public void save(){  
        //some code  
        super.save();
    }  
}</code>

Dalam contoh ini, anda hanya mahu mengejek panggilan ke super.save() dalam kelas ChildService, mengekalkan gelagat panggilan kaedah save() yang lain.

Penyelesaian Menggunakan Intipan dan Stubbing

Walaupun pemfaktoran semula mungkin merupakan penyelesaian yang berdaya maju, ia tidak selalunya boleh dilaksanakan. Dalam kes sedemikian, anda boleh memanfaatkan teknik pengintipan dan stubbing untuk mencapai tingkah laku mengejek yang diingini:

<code class="java">@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>

Penjelasan:

  1. Buat contoh ChildService kelas menggunakan kaedah pengintip() Mockito. Ini mencipta objek pengintip yang boleh digunakan untuk mengejek kaedah secara selektif.
  2. Stub kaedah dalam kelas super yang anda tidak mahu mengejek. Ini dilakukan menggunakan Mockito.doNothing(). Dalam contoh, kaedah validate() dalam superclass adalah stubbed.
  3. Lakukan tindakan pada objek pengintip (dalam kes ini, memanggil save()).
  4. Sahkan bahawa kaedah khusus panggilan dibuat pada objek pengintip (dalam kes ini, load() disahkan).

Dengan menggunakan pengintipan dan stubbing, anda boleh mensimulasikan tingkah laku mengejek yang diingini dengan berkesan, membolehkan anda menguji panggilan kaedah tertentu dalam kelas super sambil mengekalkan kefungsian asal.

Atas ialah kandungan terperinci Bagaimana untuk Mengejek Hanya Panggilan Kaedah Tertentu dalam Superclass dengan Mockito?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn