Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi · Pelajaran

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.

Pelajaran 4 daripada 413 langkah

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.

  • @Mock mengisytiharkan medan mock
  • @InjectMocks membina 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:

  • @Mock mengisytiharkan medan mock
  • @InjectMocks membina sasaran dan menyuntik mock
  • Aktifkan dengan @ExtendWith(MockitoExtension.class)
  • Suntikan pembina diutamakan dan menyokong medan final
Percuma untuk bermula

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

  1. Mock, Stub dan Palsu
  2. Mencipta Mock dengan Mockito
  3. Mengesahkan Interaksi Mock
  4. Menyuntik Mock dengan @Mock dan @InjectMocks
← Kembali ke Penguasaan Pengujian: JUnit, Mockito & Ujian Integrasi