Mengejek Kaedah Peribadi untuk Menguji dengan PowerMock
Menguji kelas dengan kaedah persendirian boleh mencabar, terutamanya apabila cuba menganggap tingkah laku yang betul bagi kaedah tersebut . PowerMock menawarkan penyelesaian untuk ini, tetapi bagi sesetengah pengguna, ia mungkin tidak berfungsi seperti yang diharapkan. Di sini, kami akan meneroka pendekatan yang mungkin menggunakan gabungan Mockito dan PowerMock untuk berjaya mengejek kaedah peribadi.
Pendekatan:
Alat utama yang akan kami gunakan ialah Kaedah bila Mockito untuk menentukan tingkah laku kaedah persendirian. Untuk mengakses kaedah peribadi, kami akan menggunakan ciri Perisik PowerMock. Ini membolehkan kami mencipta objek pengintip yang memintas panggilan kepada kaedah persendirian dan membolehkan kami mengejek tingkah lakunya.
Contoh:
Pertimbangkan kelas berikut, CodeWithPrivateMethod, yang mempunyai kaedah persendirian 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>
Ujian:
Menggunakan pendekatan yang diterangkan, kita boleh menulis ujian JUnit yang mengejek kaedah persendirian dan menegaskan yang diingini tingkah laku.
<code class="java">import org.junit.Test; import org.junit.runner.RunWith; 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; @RunWith(PowerMockRunner.class) @PrepareForTest(CodeWithPrivateMethod.class) public class CodeWithPrivateMethodTest { @Test(expected = RuntimeException.class) public void when_gambling_is_true_then_always_explode() { CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod()); when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true); spy.meaningfulPublicApi(); } }</code>
Dalam ujian ini, kami mencipta pengintip objek pengintip dan mengejek kaedah doTheGamble menggunakan bila. Kami menyatakan bahawa untuk sebarang input, kaedah harus sentiasa kembali benar. Akibatnya, apabila kaedah yang bermaknaPublicApi dipanggil, ujian menjangkakan kod itu akan membuang RuntimeException disebabkan oleh tingkah laku yang diejek kaedah persendirian.
Pendekatan ini menggabungkan kuasa Mockito untuk mengejek dan PowerMock untuk mengakses peribadi. kaedah, menyediakan penyelesaian lengkap untuk kod ujian yang bergantung pada kaedah peribadi.
Atas ialah kandungan terperinci Bagaimana untuk Mengejek Kaedah Peribadi untuk Menguji dengan PowerMock dan Mockito?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!