Rumah > Java > javaTutorial > teks badan

Bagaimanakah cara saya mengejek Kaedah Peribadi untuk Menguji Menggunakan PowerMock?

Linda Hamilton
Lepaskan: 2024-11-03 15:06:30
asal
219 orang telah melayarinya

How do I Mock Private Methods for Testing Using PowerMock?

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:

  1. 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>
    Salin selepas log masuk
  2. 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>
    Salin selepas log masuk
  3. Buat Contoh Perisik: Menggunakan PowerMockito , cipta contoh pengintip kelas yang mengandungi kaedah persendirian.

    <code class="java">CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());</code>
    Salin selepas log masuk
  4. 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>
    Salin selepas log masuk
  5. Uji Kaedah Awam: Panggil kaedah awam yang menggunakan kaedah persendirian dan sahkan kelakuannya berdasarkan nilai pulangan yang diejek.

    <code class="java">spy.meaningfulPublicApi();</code>
    Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan