Rumah >Java >javaTutorial >Bagaimana Cara Mengejek Separa dalam Mockito: Mengejek Kaedah Khusus Semasa Memelihara Yang Lain?

Bagaimana Cara Mengejek Separa dalam Mockito: Mengejek Kaedah Khusus Semasa Memelihara Yang Lain?

Barbara Streisand
Barbara Streisandasal
2024-12-05 13:26:11745semak imbas

How to Partially Mock Methods in Mockito: Mocking Specific Methods While Preserving Others?

Ejekan Separa: Kaedah Spesifik Mengejek dalam Mockito

Apabila menguji kelas, mungkin perlu mengejek kaedah tertentu sahaja sambil mengekalkan tingkah laku daripada orang lain. Dalam Mockito, ini dicapai melalui "ejek separa", di mana pilihan kaedah diejek manakala kaedah yang tidak diejek dilaksanakan seperti yang dimaksudkan.

Pertimbangkan kelas Saham berikut dengan getPrice(), getQuantity(), dan getValue( ) kaedah:

public class Stock {
    ...
    public double getValue() {
        return getPrice() * getQuantity();
    }
}

Dalam kes ujian, jika kita ingin mengejek getPrice() dan kaedah getQuantity() tetapi biarkan getValue() dilaksanakan seperti biasa, kita boleh mentakrifkan olok-olok separa seperti berikut:

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
when(stock.getValue()).thenCallRealMethod();

Di sini, kaedah getPrice() dan getQuantity() telah mengejek pelaksanaan, manakala getValue() dilaksanakan seperti dalam kelas Saham asal.

Sebagai alternatif, menggunakan "perisik" API:

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);

Semua kaedah panggilan lain, dalam kes ini getValue(), gunakan pelaksanaan sebenar.

Untuk memastikan kaedah sebenar tidak dipanggil dan logik mengejek digunakan secara konsisten, pertimbangkan tatatanda alternatif berikut:

doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa dalam contoh ini, kaedah getValue() bergantung pada harga dan kuantiti secara langsung, bukan pengambil mereka. Akibatnya, mengejek getPrice() dan getQuantity() mungkin masih tidak menghasilkan gelagat yang diingini.

Pendekatan alternatif adalah untuk mengelakkan ejekan sepenuhnya dan sebaliknya bergantung pada instantiasi langsung kelas Saham:

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();

Dengan mencipta contoh sebenar, kami boleh memastikan getValue() dilaksanakan seperti yang dimaksudkan, bergantung pada harga sebenar dan nilai kuantiti.

Atas ialah kandungan terperinci Bagaimana Cara Mengejek Separa dalam Mockito: Mengejek Kaedah Khusus Semasa Memelihara Yang Lain?. 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