Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengejek Kaedah Secara Selektif dalam Mockito untuk Mengejek Separa?

Bagaimanakah Saya Boleh Mengejek Kaedah Secara Selektif dalam Mockito untuk Mengejek Separa?

Patricia Arquette
Patricia Arquetteasal
2024-12-20 20:11:10921semak imbas

How Can I Selectively Mock Methods in Mockito for Partial Mocking?

Gunakan Mockito untuk Mengejek Kaedah Terpilih

Mockito menawarkan fleksibiliti dalam mengejek kaedah tertentu dalam kelas. Dengan memanfaatkan olok-olok separa, pembangun boleh memilih kaedah untuk mengatasi sementara membiarkan yang lain utuh.

Sebagai contoh, pertimbangkan kelas Stok dengan kaedah getPrice(), getQuantity(), dan getValue(). Anda mungkin ingin mengejek dua kaedah pertama untuk nilai pulangannya tetapi biarkan getValue() mengekalkan tingkah laku asalnya.

Menggunakan olok-olok separa dalam Mockito, anda boleh mencapai ketepatan ini. Objek Stok dijadikan sebagai olok-olok, manakala jangkaan khusus ditetapkan untuk getPrice() dan getQuantity(). Berikut ialah contoh:

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

Dengan memanggil thenCallRealMethod() untuk getValue(), anda mengekalkan pelaksanaan sebenar:

when(stock.getValue()).thenCallRealMethod();

Sebagai alternatif, pengintip boleh digunakan, di mana semua kaedah pada mulanya merujuk kepada pelaksanaan sebenar. Hanya kaedah yang ditikam secara eksplisit akan menerima pakai tingkah laku yang diubah. Berikut ialah pendekatan pengintip:

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

Perhatikan bahawa apabila menggunakan pengintip, adalah penting untuk mengelak daripada memanggil kaedah sebenar dalam kaedah stubbed.

Namun pilihan lain melibatkan bendera Mockito.CALLS_REAL_METHODS:

Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );

Pendekatan ini mendelegasikan kaedah yang tidak terputus kepada kaedah sebenar mereka pelaksanaan.

Walau bagaimanapun, dalam contoh Saham yang diberikan, strategi mengejek separa ini mungkin masih gagal disebabkan oleh pergantungan getValue() pada kedua-dua harga dan kuantiti secara langsung, bukan semata-mata pada penerima mereka.

Selain itu, pertimbangkan mengelak secara terang-terangan ejekan apabila boleh:

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
assertEquals("Stock value not correct", 100.00*200, value, .00001);

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengejek Kaedah Secara Selektif dalam Mockito untuk Mengejek Separa?. 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