Rumah > Java > javaTutorial > Bagaimana untuk mengejek Panggilan Kaedah Khusus dalam Superclass dengan Mockito?

Bagaimana untuk mengejek Panggilan Kaedah Khusus dalam Superclass dengan Mockito?

Susan Sarandon
Lepaskan: 2024-10-30 18:36:30
asal
249 orang telah melayarinya

How to Mock Specific Method Calls in Superclasses with Mockito?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan