Pengenalan kepada JUnit Mocking
Dalam ujian unit moden, mengejek ialah alat berkuasa yang membantu mensimulasikan gelagat kebergantungan, dan JUnit digabungkan dengan rangka kerja mengejek menjadikan proses ini sangat berkesan. Dengan menggunakan olok-olok, pembangun boleh mengasingkan kod mereka daripada kebergantungan luaran dan menumpukan pada menguji fungsi tertentu dalam pangkalan kod mereka. Dalam siaran ini, kami akan meneroka perkara penting mengejek junit dan cara menerapkannya dengan berkesan menggunakan rangka kerja Mockito yang popular.
Apakah Mengejek dalam Ujian Unit?
Mengejek merujuk kepada proses mencipta versi simulasi objek atau kaedah dalam ujian unit, membenarkan pembangun mengasingkan kod yang sedang diuji. Teknik ini amat berguna apabila menguji kelas yang bergantung pada perkhidmatan luaran, pangkalan data atau API. Dengan menggantikan kebergantungan ini dengan objek olok-olok, anda boleh mensimulasikan gelagatnya, memfokuskan ujian anda semata-mata pada logik di dalam kelas atau kaedah yang sedang diteliti.
Sebagai contoh, pertimbangkan kelas perkhidmatan yang bergantung pada sambungan pangkalan data. Semasa ujian unit, anda tidak memerlukan sambungan pangkalan data sebenar; sebaliknya, anda membuat versi olok-olok yang mengembalikan hasil yang dipratentukan.
Mengapa Mengejek Penting dalam JUnit
Mengejek memainkan peranan penting dalam ujian JUnit dengan mendayakan pengasingan komponen sistem, memastikan ujian unit memberi tumpuan semata-mata pada logik kaedah yang diuji. Tanpa mengejek, ujian anda boleh bergantung pada keadaan sistem luaran, seperti pangkalan data atau API pihak ketiga, menjadikannya rapuh dan lebih sukar untuk diselenggara.
Dengan menggunakan olok-olok, anda mengelakkan keperluan untuk interaksi sebenar dengan kebergantungan, yang menghasilkan ujian yang lebih pantas dan lebih dipercayai. Ia juga memberikan lebih kawalan ke atas gelagat kebergantungan, membolehkan anda mensimulasikan keadaan ralat, kes tepi atau output tertentu dengan mudah.
Rangka Kerja Mengejek Popular untuk JUnit
Beberapa rangka kerja mengejek disepadukan dengan baik dengan JUnit, dengan Mockito dan EasyMock menjadi dua alat yang paling biasa digunakan. Mockito adalah yang paling popular kerana kemudahan penggunaannya, sintaks yang ringkas dan set ciri yang kaya.
• Mockito: Rangka kerja ini membolehkan anda membuat objek olok-olok dengan mudah dan menyediakan cara yang berkuasa untuk mengkonfigurasi gelagat olok-olok tersebut.
• EasyMock: Alternatif lain, EasyMock, menyediakan kefungsian yang serupa tetapi mempunyai pendekatan berbeza untuk mencipta objek tiruan dan mengesahkan interaksi.
Walaupun kedua-dua rangka kerja berkesan, Mockito lebih disukai dalam banyak projek kerana APInya yang mudah dan sokongan komuniti yang aktif.
Menyediakan Mockito dengan JUnit
Mockito, rangka kerja mengejek yang berkuasa, boleh disepadukan dengan lancar ke dalam ujian JUnit dengan persediaan yang minimum. Untuk menggunakan Mockito dalam projek anda, anda perlu menambah kebergantungan Mockito pada fail binaan anda. Sebagai contoh, dalam projek Maven, anda akan memasukkan perkara berikut dalam pom.xml anda:
xml
Salin kod
org.mockito
mockito-core
4.0.0
ujian
Setelah kebergantungan ditambahkan, anda boleh mula menggunakan anotasi dan kaedah Mockito untuk mencipta objek olok-olok, mentakrifkan gelagatnya dan mengesahkan interaksi.
Menulis Kes Ujian Olok-olok Mudah
Untuk menunjukkan kuasa Mockito, mari kita mulakan dengan contoh asas mengejek pergantungan perkhidmatan dalam ujian JUnit. Pertimbangkan senario di mana kami sedang menguji kelas UserService yang bergantung pada UserRepository untuk mengambil data.
Begini cara kami boleh mengejek repositori dalam ujian kami:
java
Salin kod
@RunWith(MockitoJUnitRunner.class)
Ujian Perkhidmatan Pengguna kelas awam {
@Mock private UserRepository userRepository; @InjectMocks private UserService userService; @Test public void testGetUserById() { // Arrange User mockUser = new User(1, "John Doe"); Mockito.when(userRepository.findById(1)).thenReturn(Optional.of(mockUser)); // Act User result = userService.getUserById(1); // Assert assertEquals("John Doe", result.getName()); }
}
Dalam ujian ini, kami mencipta olok-olok UserRepository dan mentakrifkan kelakuannya menggunakan Mockito.when() untuk mengembalikan pengguna tertentu apabila dipanggil. Ini membolehkan kami menguji kelas UserService secara berasingan tanpa bergantung pada pangkalan data sebenar.
Memahami Anotasi @Mock dan @InjectMocks
Mockito menyediakan anotasi seperti @Mock dan @InjectMocks, yang membantu memudahkan penciptaan objek tiruan dan suntikannya ke dalam kelas yang sedang diuji.
• @Mock: Anotasi ini digunakan untuk mencipta contoh olok-olok bagi kelas yang ditentukan. Dalam contoh di atas, UserRepository diejek menggunakan anotasi ini.
• @InjectMocks: Anotasi ini memberitahu Mockito untuk menyuntik olok-olok (seperti UserRepository) ke dalam kelas yang diuji (UserService), dengan berkesan mendawai kebergantungan olok-olok secara automatik.
Anotasi ini mengurangkan kod boilerplate dan menjadikan ujian anda lebih mudah dibaca dan diselenggara.
Mengesahkan Interaksi Olok-olok
Selain objek mengejek, Mockito membenarkan kami mengesahkan interaksi dengan olok-olok ini, memastikan kaedah tertentu dipanggil dengan hujah yang dijangkakan. Ini berguna dalam senario di mana kod anda bukan sahaja bergantung pada hasil panggilan kaedah tetapi juga kesan sampingan atau interaksi.
Begini cara anda boleh mengesahkan panggilan kaedah dalam Mockito:
java
Salin kod
@ujian
public void testSaveUser() {
Pengguna pengguna = Pengguna baharu(1, "John Doe");
// Act userService.saveUser(user); // Assert Mockito.verify(userRepository).save(user);
}
Dalam contoh ini, Mockito.verify() menyemak bahawa kaedah save() telah dipanggil pada objek UserRepository olok-olok dengan hujah yang dijangkakan.
Amalan Terbaik untuk Mengejek dalam JUnit
Apabila menggunakan olok-olok dalam ujian JUnit, adalah penting untuk mengikuti amalan terbaik tertentu untuk mengekalkan kebolehpercayaan dan kebolehbacaan ujian:
Atas ialah kandungan terperinci JUnit Mocking: Panduan Lengkap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!