Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Mengejek Kaedah Peribadi untuk Menguji dengan PowerMock dan Mockito?

Patricia Arquette
Lepaskan: 2024-11-04 04:21:29
asal
1044 orang telah melayarinya

How to Mock Private Methods for Testing with PowerMock and Mockito?

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

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

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!

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