Rumah >Java >javaTutorial >Bagaimanakah Anda Boleh Mengejek Kelas dengan Panggilan `new()` Menggunakan Mockito?

Bagaimanakah Anda Boleh Mengejek Kelas dengan Panggilan `new()` Menggunakan Mockito?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 00:23:29749semak imbas

How Can You Mock a Class with a `new()` Call Using Mockito?

Mengejek Kelas dengan Panggilan () Baharu Menggunakan Mockito

Kelas warisan selalunya membuat seketika objek secara dalaman, menjadikannya mencabar untuk mengujinya menggunakan ejekan rangka kerja seperti Mockito. Ini menjadi jelas apabila menyediakan kebergantungan yang kompleks, seperti konteks keselamatan yang memerlukan persediaan luaran.

Pertimbangkan kelas contoh:

<code class="java">public class TestedClass {
  public LoginContext login(String user, String password) {
    LoginContext lc = new LoginContext("login", callbackHandler);
  }
}</code>

Kami mahu menguji kelas ini, tetapi log masuk() kaedah membuat seketika objek LoginContext, merumitkan ejekan tanpa memfaktorkan semula kod.

Bolehkah Mockito mengejek LoginContext?

Ya, adalah mungkin untuk mengejek kelas LoginContext menggunakan Mockito dengan memanfaatkan ciri kuat pengintip. Tidak seperti stub, mata-mata memanggil kaedah sebenar objek yang diintip (melainkan kaedah telah distub).

Menggunakan Spies untuk Mengejek Log MasukKonteks

Untuk mengejek Konteks Masuk tanpa mengubah kod sumber, kita boleh menggunakan pendekatan berikut:

<code class="java">TestedClass tc = spy(new TestedClass());
LoginContext lcMock = mock(LoginContext.class);
when(tc.login(anyString(), anyString())).thenReturn(lcMock);</code>

Kesimpulan

Dengan menggunakan pengintip secara strategik, kami boleh mengejek kelas yang membuat seketika objek secara dalaman dengan berkesan. , walaupun apabila kod asal kekal tidak disentuh. Teknik ini membolehkan kami menguji kelas tersebut dengan cekap dan memastikan tingkah laku mereka memenuhi jangkaan.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mengejek Kelas dengan Panggilan `new()` Menggunakan Mockito?. 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