Menyuntik Mock dengan @Mock dan @InjectMocks
Gunakan anotasi Mockito untuk menyambungkan kebergantungan yang dimock ke dalam kelas yang sedang diuji, sekali gus mengurangkan kod persediaan berulang.
Menyuntik Mock dengan @Mock dan @InjectMocks ialah pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.
Mengapa Anotasi?
Mencipta mock secara manual dengan mock(Type.class) berfungsi, tetapi untuk kelas yang mempunyai beberapa kebergantungan, cara ini menjadi berulang. Mockito menyediakan anotasi yang mengisytiharkan dan menyambungkan mock untuk Anda.
@Mockmengisytiharkan medan mock@InjectMocksmembina objek sebenar dan menyuntik mock
Kelas yang Diuji
Bayangkan OrderService yang bergantung pada PaymentGateway. Kita mahu menguji perkhidmatan itu sambil mengawal get laluan tersebut.
class OrderService {
private final PaymentGateway gateway;
OrderService(PaymentGateway gateway) { this.gateway = gateway; }
boolean checkout(double amount) {
return gateway.charge(amount);
}
}Mengisytiharkan @Mock
Anotasikan medan dengan @Mock dan Mockito akan mencipta tika mock untuknya secara automatik selepas anotasi diproses.
@Mock
PaymentGateway gateway;Menggunakan @InjectMocks
@InjectMocks memberitahu Mockito supaya menjadikan sasaran dan menyuntik sebarang medan @Mock ke dalamnya melalui pembina, penetap atau suntikan medan.
@Mock PaymentGateway gateway;
@InjectMocks OrderService service;Mengaktifkan Anotasi
Anotasi tidak melakukan apa-apa dengan sendiri. Dengan JUnit 5, aktifkannya menggunakan @ExtendWith(MockitoExtension.class) pada kelas ujian.
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
@Mock PaymentGateway gateway;
@InjectMocks OrderService service;
}Pendekatan openMocks Lama
Tanpa sambungan itu, Anda boleh memanggil MockitoAnnotations.openMocks(this) dalam kaedah @BeforeEach. Utamakan sambungan tersebut jika boleh.
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}Menulis Ujian
Sekarang buat stub untuk mock yang disuntik dan jalankan perkhidmatan itu. Perkhidmatan tersebut sudah memegang get laluan yang dimock, jadi tiada penyambungan manual diperlukan.
@Test
void checkoutSucceeds() {
when(gateway.charge(100.0)).thenReturn(true);
assertTrue(service.checkout(100.0));
}Strategi Suntikan
Mockito mencuba suntikan mengikut urutan ini:
- suntikan pembina (diutamakan)
- suntikan penetap
- suntikan medan
Suntikan pembina paling selamat kerana ia berfungsi dengan medan final.
Berbilang Kebergantungan
Kelas dengan beberapa kolaborator hanya memerlukan beberapa medan @Mock. Mockito memadankan setiap satunya mengikut jenis semasa suntikan.
@Mock PaymentGateway gateway;
@Mock InventoryRepo inventory;
@InjectMocks OrderService service;Apabila Suntikan Gagal Secara Senyap
Jika kebergantungan tidak dapat dipadankan, medan itu kekal null dan bukannya menghasilkan pengecualian. NullPointerException semasa ujian sering bermaksud suntikan tidak berlaku seperti yang dijangka. Sahkan jenis dan tandatangan pembina.
Ujian yang Lebih Kemas
Anotasi menghapuskan panggilan mock(...) dan new Service(...) yang berulang, lalu memastikan setiap ujian tertumpu pada tingkah laku dan bukannya penyambungan.
Semakan Pantas
Anotasi manakah yang membina objek sebenar dan menyuntik mock ke dalamnya?
Imbas Kembali
Anda telah mempelajari cara menyambungkan mock secara deklaratif:
@Mockmengisytiharkan medan mock@InjectMocksmembina sasaran dan menyuntik mock- Aktifkan dengan
@ExtendWith(MockitoExtension.class) - Suntikan pembina diutamakan dan menyokong medan final
Pelajari Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Menyuntik Mock dengan @Mock dan @InjectMocks” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi, termasuk “Menyuntik Mock dengan @Mock dan @InjectMocks”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menyuntik Mock dengan @Mock dan @InjectMocks”?
Gunakan anotasi Mockito untuk menyambungkan kebergantungan yang dimock ke dalam kelas yang sedang diuji, sekali gus mengurangkan kod persediaan berulang. Anda berlatih Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menyuntik Mock dengan @Mock dan @InjectMocks” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi ini?
Ya. Setiap pelajaran Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mock, Stub dan Palsu
- Mencipta Mock dengan Mockito
- Mengesahkan Interaksi Mock
- Menyuntik Mock dengan @Mock dan @InjectMocks