Catatan

Menunjukkan catatan yang berlabel PowerMockito

Mock Static Function dengan PowerMockito

PowerMockito adalah satu library yang sangat membantu semasa kita menulis unit test untuk kod yang menggunakan function static yang menyukarkan kita untuk menggunakan mock. Ini adalah beberapa kes yang telah Tedi gunakan semasa menyiapkan kerja sekolah. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() Mula-mula set @RunWith dan @PrepareForTest @RunWith(PowerMockRunner.class) @PrepareForTest({TransactionAspectSupport.class}) Kemudian set apa behaviour kita nak:     @Before    public void setUp() throws Exception {            MockitoAnnotations.initMocks(this);     PowerMockito.mockStatic(TransactionAspectSupport.class);     TransactionStatus transactionStatus = PowerMockito.mock(TransactionStatus.class);     PowerMockito.when(TransactionAspectSupport.currentTransactionStatus()).thenReturn(transactionStatus);     PowerMockito.doNothing().when(transactionStatus).setRollback...

Unit test JUnit4 mock SLF4J logger atau LOG4J guna PowerMockito

Sekarang Tedi cuba menulis beberapa unit test untuk kod-kod legasi dengan pilihan tiada pilihan untuk menukar kod tersebut kepada kod mesra unit test. Salah satu kes apabila menulis unit test untuk kod macam ini ialah nak cover bahagian yang ada log siap ada condition lak tu pada logger tersebut! Terpaksalah Tedi mock logger tersebut di mana bukan mudah nak menjayakannya. Ralat 1: Cannot subclass final class Ralat 2: Unable to set internal state on a private field Ralat 1: Cannot subclass final class Kesimpulannya menurut pemahaman Tedi lah kan ada masalah untuk subclass final class tapi punca sebenarnya tu mungkin disebabkan oleh beberapa level class dalam kod kita. Contohnya macam di bawah nanti Tedi nak mock LoggerFactory tapi ada masalah pada Log4jLoggerAdapter. Mesej ralat: java.lang.IllegalArgumentException: Cannot subclass final class class org.slf4j.impl. Log4jLoggerAdapter at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447) at org.mocki...

Mock New Instance Creation Gunakan PowerMockito

alhamdulillah, setelah berusaha selama 3 jam untuk membantu kawan Tedi siapkan baiki unit test dia, akhir selesai juga. Tedi dah mengantuk benar ni. Masalahnya dalam unit test dia tu tak konsisten keputusan yang dihasilkan. Di local Intellij Idea Tedi fail, pada mesin kawan Tedi, okay pula. Run dalam sonar local Tedi dan kawan Tedi, dua-dua pass. Masalah besar ialah ia sentiasa fail dalam SonarQube server. Tension betul sebab kalau tak lepas gatekeeper ni memang code ni takkan dapat merge ke dalam branch hotfix. Gunakan branch hotfix malam ni sebab ada isu produksi. Akhirnya pemilik unit test ni beri idea untuk mock creation of new FileOutputStream, sebab Tedi asyik dapat FileNotFoundException. Setelah tersengguk-sengguk memikirkan solusi, akhirnya ketemui jua cara mock new instance creation. @Test public void testWrite() throws Exception { FileOutputStream fileOut = Mockito.mock(FileOutputStream.class); PowerMockito.whenNew(FileOutputStream.class).withAnyArguments().then...

Popular