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!