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 classRalat 2: Unable to set internal state on a private fieldRalat 1: Cannot subclass final classKesimpulannya 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.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378)
at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318)
at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:123)
at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:111)
at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:59)
at org.powermock.api.mockito.PowerMockito.spy(PowerMockito.java:220)
Tambah semua annotation ni pada kelas test anda (SLf4J):
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class, Log4jLoggerAdapter.class})
Kalau guna log4j:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Logger.class})
dan baris kod untuk spy digantikan dengan : loggerSpy = PowerMockito.spy( Logger.getLogger(actionToTest.getClass())); 
Contoh kod unit test dalam dunia sebenar:
*** kod ini adalah cuba jaya namun berjalan setakat ni cuma tak bersih lah contohnya Tedi baru tahu bahawa loggerSpy tu tak perlu mock, cukup declare sebagai private variable sahaja.
package com.xxx.txn.core.action.validate;
import com.xxx.db.model.KodBalasan;
import com.xxx.txn.core.Permintaan;
import com.xxx.txn.core.Balasan;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.slf4j.Logger;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.reflect.Whitebox;
import org.slf4j.LoggerFactory;
import org.slf4j.impl.Log4jLoggerAdapter;
import java.util.HashMap;
import java.util.Map;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class, Log4jLoggerAdapter.class})
public class ValidatePrepaidAccountExistenceForAccountingActionTest {
private NamaKelasDiuji actionToTest;
@Mock
private Logger loggerSpy;
@Before
public void setUp() {
actionToTest = new NamaKelasDiuji();
loggerSpy = PowerMockito.spy( LoggerFactory.getLogger(actionToTest.getClass()));
}

@Test
public void namaUjian() throws Exception {
// Setup
final Balasan balasan = new Balasan();
final Map<String, Object> serviceMap = new HashMap<>();
Permintaan permintaan = new Permintaan();
balasan.setBalasan(permintaan);
// Prepare mock
when(loggerSpy.isDebugEnabled()).thenReturn(true);
Whitebox.setInternalState(actionToTest.getClass(),"logger", loggerSpy);
// Run the test
actionToTest.process(balasan, serviceMap);
// Verify the results
Assert.assertEquals("Should return INVALID_USER_ID",
KodBalasan.INVALID_USER_ID,balasan.getKodBalasan());
}
}
Ralat 2: Unable to set internal state on a private fieldjava.lang.RuntimeException: Unable to set internal state on a private field. Please report to mockito mailing list.
at org.mockito.internal.util.reflection.Whitebox.setInternalState(Whitebox.java:29)
....
Caused by: java.lang.RuntimeException: You want me to get this field: 'logger' on this class: 'Object' but this field is not declared withing hierarchy of this class!
at org.mockito.internal.util.reflection.Whitebox.getFieldFromHierarchy(Whitebox.java:40)
at org.mockito.internal.util.reflection.Whitebox.setInternalState(Whitebox.java:25)
PENYELESAIAN:
Import Whitebox daripada PowerMockito bukannya daripada Mockito! Sebab dalam kes ni nak gunakan PowerMock!
//import org.mockito.internal.util.reflection.Whitebox;
import org.powermock.reflect.Whitebox;


Artikel ini hanyalah simpanan cache dari url asal penulis yang berkebarangkalian sudah terlalu lama atau sudah dibuang :

http://www.interpretzz.com/2019/02/unit-test-junit4-mock-slf4j-logger-atau.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+Interpretzz+(interpretZZ)

Kempen Promosi dan Iklan
Kami memerlukan jasa baik anda untuk menyokong kempen pengiklanan dalam website kami. Serba sedikit anda telah membantu kami untuk mengekalkan servis percuma aggregating ini kepada semua.

Anda juga boleh memberikan sumbangan anda kepada kami dengan menghubungi kami di sini
Lukis Kening Teknik Gam Atau Guna Concealer Haram Ke Dalam Islam

Lukis Kening Teknik Gam Atau Guna Concealer Haram Ke Dalam Islam

papar berkaitan - pada 3/3/2019 - jumlah : 767 hits
Kuasa solekan memang tidak dapat dinafikan lagi dapat mengubah wajah seseorang dari biasa kepada terlalu menawan Ia seperti pembedahan plastik sementara yang tidak menyakitkan dan boleh diubah mengikut kepuasan hati sendiri Di arus media so...
Sandar Pada Bahu Duduk Dukung Atau Meniarap Guna 4 Cara Mudah Ini Untuk Sendawakan Bayi

Sandar Pada Bahu Duduk Dukung Atau Meniarap Guna 4 Cara Mudah Ini Untuk Sendawakan Bayi

papar berkaitan - pada 14/2/2019 - jumlah : 842 hits
Sandar pada bahu duduk dukung atau meniarapkan badannya adalah antara cara yang boleh mama lakukan untuk sendawakan bayi Ia penting kalau nak elak bayi kembung dan tidak terganggu Menyendawakan bayi ialah satu kewajipan setiap kali selepas ...
Kerjasama Pas Umno Tidak Guna Simbol Baru

Kerjasama Pas Umno Tidak Guna Simbol Baru

papar berkaitan - pada 6/3/2019 - jumlah : 244 hits
KUALA LUMPUR Umno dan PAS hari ini mengumumkan kerjasama secara rasmi yang akan memfokuskan aspek penyatuan ummah kata Timbalan Presiden Umno Datuk Seri Mohamad Hasan Beliau berkata kerjasama itu bukan gabungan Umno dan PAS sebagai parti ba...
Pahang Guna Puisi Bantu Murid Pra Sekolah Kuasai Bahasa Inggeris

Pahang Guna Puisi Bantu Murid Pra Sekolah Kuasai Bahasa Inggeris

papar berkaitan - pada 5/3/2019 - jumlah : 403 hits
Imej via BernamaKUANTAN Modul bahasa Inggeris Let s Rhyme akan mula digunakan secara berperingkat di 19 buah pra sekolah di seluruh daerah ini dalam usaha membantu murid menguasai bahasa itu dengan lebih pantas Ketua Penolong Pengarah Bahag...
Jus Buah Ini Elok Untuk Gusi Anak Cegah Gusi Berdarah Resipi Mudah Hanya Guna 4 Bahan Sahaja

Jus Buah Ini Elok Untuk Gusi Anak Cegah Gusi Berdarah Resipi Mudah Hanya Guna 4 Bahan Sahaja

papar berkaitan - pada 5/3/2019 - jumlah : 528 hits
Mengunyah sebiji epal atau meminum jusnya setiap hari sudah cukup untuk membekalkan khasiat bagi mengurangkan kandungan kolesterol dalam badan Manakala timun pula mampu menggantikan kehilangan air dari badan kerana timun mengandungi air Sel...
Padah Guna Nombor Pendaftaran Bossku Seorang Remaja Ditahan

Padah Guna Nombor Pendaftaran Bossku Seorang Remaja Ditahan

papar berkaitan - pada 6/3/2019 - jumlah : 309 hits
Padah Guna Nombor Pendaftaran BOSSKU Seorang Remaja DitahanTular di media sosial Video berdurasi lebih satu minit itu memperlihatkan seorang remaja lelaki sedang membuang nombor pendaftaran sebuah motosikal yang dikatakan menggunakan Bossku...
Guna Alasan Akaun Yang Pindah Wang Sudah Over Limit Individu Menyamar Lelaki Ini Kaut Untung Atas Angin

Guna Alasan Akaun Yang Pindah Wang Sudah Over Limit Individu Menyamar Lelaki Ini Kaut Untung Atas Angin

papar berkaitan - pada 7/3/2019 - jumlah : 485 hits
Guna Alasan Akaun yang Pindah Wang Sudah Over Limit Individu Menyamar Lelaki Ini Kaut Untung Atas Angin Belum sembuh lara di hati selepas pemergian isteri tercinta yang baru dinikahi kurang empat bulan seorang pemuda terkejut apabila ada in...
Kanak Kanak Datang Ke Masjid Patut Atau Tidak

Kanak Kanak Datang Ke Masjid Patut Atau Tidak

papar berkaitan - pada 14/2/2019 - jumlah : 489 hits
Assalamualaikum Hi Semua Kanak Kanak Datang Ke Masjid Patut Atau Tidak Pelbagai jenis penerimaan daripada orang sekeliling terutamanya jemaah masjid dan surau surau apabila adanya kanak kanak yang datang ke masjid dan surau surau semata mat...
Cairan Pra Ejakulasi Atau Air Madzi Boleh Sebabkan Kehamilan Ini Penjelasan Pakar

Cairan Pra Ejakulasi Atau Air Madzi Boleh Sebabkan Kehamilan Ini Penjelasan Pakar

papar berkaitan - pada 14/2/2019 - jumlah : 749 hits
Untuk mana mana pasangan yang tidak merancang kehamilan pasti anda tertanya tanya adakah cairan pra ejakulasi dapat menyebabkan kehamilan Ha jom kita semak tentang isu ini menurut pandangan pakar Ramai sebenarnya yang keliru antara cairan e...
Celebrate A Peranakan Christmas In Kuala Lumpur With Santa Grand Signature S Exclusive Buffet

Maggi Malam S Roadside Success Sparks Controversy Over Alleged Unlicensed Operation

Bayangkan Ejen Mossad Di Komtar Jb

Bahaya Bila Masuk Guardian Atau Watson Memacam Terbeli

Parts Of Klang Valley Hit By Flash Floods Due To Downpour

Ainz Tulpe Introduces Hince In Malaysia

Rm12 8bil In Unclaimed Money Awaiting Owners

Business Website Boosts Credibility


echo '';
Senarai Lagu Separuh Akhir Muzik Muzik 39 Semi Final Muzik Muzik SFMM 2024 Persaingan Merebut Tiket Ke AJL Anugerah Juara Lagu

Biodata Terkini Fairuz Selamat Q Face Peserta Gegar Vaganza 2024 Musim 11 GV11 Penyanyi Lagu Izinkanlah

Biodata Terkini Arrora Salwa Salwa Razak Peserta Gegar Vaganza 2024 Musim 11 GV11 Penyanyi Lagu Ahmad

Biodata Terkini Penyanyi Liza Aziz Peserta Gegar Vaganza 2024 Musim 11 GV11 Adik Beradik Kepada Azlina Aziz

Senarai Peserta Gegar Vaganza 2024 Musim 11 GV11 Tonton Konsert Minggu 1 Pada 24 November Live Di Astro Ria Sooka Online


Curang Itu Pilihan Tapiiii

Doa Nabi Daud

Apakah Kewujudan Jho Low Sudah Di Anggap Hearsay

Rony Parulian Tak Ada Ujungnya Chord

Lirik Lagu Rakit Nadzira Shafa

14 Jumper Kereta Terbaik Untuk Kenderaan Kecil Besar