Mengejek Kaedah Peribadi untuk Menguji dengan PowerMock
Apabila menguji kelas dengan kaedah persendirian, selalunya perlu untuk mengejek kaedah ini untuk memastikan orang ramai API berfungsi seperti yang diharapkan. Walau bagaimanapun, berbuat demikian boleh mencabar apabila menggunakan rangka kerja seperti Mockito.
Masalah:
Anda mungkin menghadapi masalah semasa cuba mengejek kaedah peribadi menggunakan PowerMock, khususnya apabila anda mahu memanipulasi nilai pulangan kaedah persendirian.
Penyelesaian:
Ikuti langkah ini untuk mengejek kaedah persendirian untuk ujian menggunakan PowerMock:
Import PowerMock API: Sertakan anotasi dan API PowerMock yang diperlukan ke dalam kelas ujian anda.
<code class="java">import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.powermock.api.mockito.PowerMockito.when; import static org.powermock.api.support.membermodification.MemberMatcher.method;</code>
Sediakan Kelas untuk Ujian: Anotasi kelas ujian anda dengan @PrepareForTest dan nyatakan kelas yang mengandungi kaedah persendirian yang anda mahu ejek.
<code class="java">@PrepareForTest(CodeWithPrivateMethod.class)</code>
Buat Contoh Perisik: Menggunakan PowerMockito , cipta contoh pengintip kelas yang mengandungi kaedah persendirian.
<code class="java">CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());</code>
Kaedah Peribadi Mock: Gunakan kaedah PowerMockito apabila untuk mengejek kaedah persendirian. Nyatakan kelas, nama kaedah, jenis parameter dan nilai pulangan yang diingini.
<code class="java">when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true);</code>
Uji Kaedah Awam: Panggil kaedah awam yang menggunakan kaedah persendirian dan sahkan kelakuannya berdasarkan nilai pulangan yang diejek.
<code class="java">spy.meaningfulPublicApi();</code>
Contoh:
Pertimbangkan kelas CodeWithPrivateMethod dengan kaedah peribadi doTheGamble :
<code class="java">public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whatever", 1 << 3)) { throw new RuntimeException("boom"); } } private boolean doTheGamble(String whatever, int binary) { Random random = new Random(System.nanoTime()); boolean gamble = random.nextBoolean(); return gamble; } }</code>
Untuk mengejek doTheGamble dan sentiasa kembali benar, anda akan menulis ujian berikut:
<code class="java">@RunWith(PowerMockRunner.class) @PrepareForTest(CodeWithPrivateMethod.class) public class CodeWithPrivateMethodTest { @Test(expected = RuntimeException.class) public void when_gambling_is_true_then_always_explode() throws Exception { CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod()); when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true); spy.meaningfulPublicApi(); } }</code>
Dengan cara ini, anda boleh mengejek kaedah peribadi untuk ujian dengan berkesan, memastikan orang awam anda API berfungsi dengan betul walaupun pelaksanaan kaedah persendirian kekal tidak berubah.
Atas ialah kandungan terperinci Bagaimanakah cara saya mengejek Kaedah Peribadi untuk Menguji Menggunakan PowerMock?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!