Rumah > Java > javaTutorial > Bagaimana untuk mengejek Kaedah Peribadi di Java dengan PowerMock?

Bagaimana untuk mengejek Kaedah Peribadi di Java dengan PowerMock?

Susan Sarandon
Lepaskan: 2024-11-04 08:14:01
asal
520 orang telah melayarinya

How to Mock Private Methods in Java with PowerMock?

Menguji Kaedah Peribadi dengan PowerMock

Semasa pembangunan perisian, tidak dapat dielakkan untuk menghadapi situasi di mana anda perlu menguji kaedah awam yang bergantung pada peribadi satu. Dalam keadaan sedemikian, dengan mengandaikan kefungsian kaedah persendirian yang betul boleh memudahkan proses ujian. PowerMock ialah rangka kerja ujian Java yang menyediakan mekanisme untuk mengejek kaedah peribadi untuk tujuan ujian.

Mengejek Kaedah Peribadi Menggunakan PowerMock

Untuk mengejek kaedah peribadi menggunakan PowerMock, ikuti ini langkah:

  1. Intip Kelas: Cipta contoh pengintip kelas yang mengandungi kaedah peribadi yang anda ingin ejek. Ini boleh dicapai menggunakan kaedah PowerMockito.spy().
  2. Nyatakan Gelagat Kaedah Jangkaan: Gunakan kaedah when() untuk mentakrifkan gelagat yang dijangkakan bagi kaedah persendirian. Ini termasuk menentukan argumen dan nilai pulangan. Gunakan pemadan kaedah, seperti anyString() dan anyInt(), untuk mengendalikan nilai yang berbeza.
  3. Laksanakan Ujian: Guna kaedah awam yang memanggil kaedah persendirian dan tegaskan gelagat yang diharapkan.

Contoh:

Pertimbangkan kelas berikut dengan kaedah awam (meaningfulPublicApi()) yang menggunakan 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

Ujian JUnit yang sepadan menggunakan PowerMock akan kelihatan seperti:

<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() 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

Dalam contoh ini:

  • Anotasi @PrepareForTest menandakan kelas CodeWithPrivateMethod untuk penyediaan, membenarkan PowerMock untuk mengubah suai kaedah peribadinya.
  • Kaedah when() mentakrifkan nilai pulangan yang dijangkakan kaedah doTheGamble() untuk sebarang argumen input.
  • Ujian mengesahkan bahawa pengecualian dilemparkan apabila kaedah awam dilaksanakan.

Contoh mudah ini menunjukkan cara mengejek kaedah peribadi untuk ujian menggunakan PowerMock. Dengan memanfaatkan teknik ini, anda boleh mengasingkan dan menguji logik kaedah awam anda dengan berkesan, memastikan kebolehpercayaan perisian anda.

Atas ialah kandungan terperinci Bagaimana untuk mengejek Kaedah Peribadi di Java dengan 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