Metode Statis Mock menggunakan JMockit

1. Ikhtisar

Beberapa pustaka tiruan populer seperti Mockito dan Easymock membuat maket dengan memanfaatkan model kelas berbasis warisan Java. EasyMock mengimplementasikan antarmuka pada waktu proses, sedangkan Mockito mewarisi dari kelas target untuk membuat rintisan tiruan.

Tidak ada pendekatan yang berfungsi dengan baik untuk metode statis karena metode statis dikaitkan dengan kelas dan tidak dapat diganti. Namun, JMockit menyediakan fitur mocking metode statis.

Dalam tutorial ini, kita akan menjelajahi beberapa fitur ini.

Untuk pengantar JMockit, silakan lihat artikel kami sebelumnya.

2. Ketergantungan Maven

Mari kita mulai dengan dependensi Maven:

 org.jmockit jmockit 1.24 test 

Anda dapat menemukan versi terbaru dari perpustakaan ini di Maven Central.

3. Metode Statis Dipanggil dari Metode Non-Statis

Pertama, mari pertimbangkan kasus ketika kita memiliki kelas dengan metode non-statis yang secara internal bergantung pada metode statis :

public class AppManager { public boolean managerResponse(String question) { return AppManager.isResponsePositive(question); } public static boolean isResponsePositive(String value) { if (value == null) { return false; } int length = value.length(); int randomNumber = randomNumber(); return length == randomNumber ? true : false; } private static int randomNumber() { return new Random().nextInt(7); } }

Sekarang, kami ingin menguji metode managerResponse (). Karena nilai kembaliannya bergantung pada metode lain, kita perlu meniru metode isResponsePositive () .

Kita bisa mengejek metode statis ini menggunakan JMockit ini kelas anonim mockit.MockUp.MockUp ( di mana T akan menjadi nama kelas ) dan @Mock penjelasan:

@Test public void givenAppManager_whenStaticMethodCalled_thenValidateExpectedResponse() { new MockUp() { @Mock public boolean isResponsePositive(String value) { return false; } }; assertFalse(appManager.managerResponse("Some string...")); }

Di sini, kami mengejek isResponsePositive () dengan nilai kembalian yang ingin kami gunakan untuk pengujian. Oleh karena itu, memverifikasi hasil yang diharapkan menggunakan utilitas Assertions yang tersedia di Junit-5.

4. Uji Metode Statis Pribadi

Dalam beberapa kasus, metode lain menggunakan metode statis pribadi kelas:

private static Integer stringToInteger(String num) { return Integer.parseInt(num); }

Untuk menguji metode seperti itu, kita perlu meniru metode statis pribadi . Kita bisa menggunakan metode utilitas Deencapsulation.invoke () yang disediakan oleh JMockit :

@Test public void givenAppManager_whenPrivateStaticMethod_thenValidateExpectedResponse() { int response = Deencapsulation.invoke(AppManager.class, "stringToInteger", "110"); assertEquals(110, response); }

Seperti namanya, tujuannya adalah untuk menghilangkan enkapsulasi keadaan suatu objek. Dengan cara ini, JMockit menyederhanakan metode pengujian yang tidak dapat diuji sebaliknya.

5. Kesimpulan

Pada artikel ini, kita telah melihat bagaimana metode statis dapat diejek menggunakan JMockit . Untuk melihat lebih dalam tentang beberapa fitur lanjutan JMockit, lihat artikel Penggunaan Lanjutan JMockit kami.

Seperti biasa, kode sumber lengkap untuk tutorial ini tersedia di GitHub.