logo

ПоверМоцк

ПоверМоцк је Јава оквир отвореног кода који се користи за креирање лажног објекта у јединичном тестирању. Проширује друге оквире за ругање као што су ЕасиМоцк и Моцкито да би побољшао могућности. Оквир ПоверМоцк користи прилагођене технике за учитавање класа и бајт кодова да би омогућио исмевање статичких метода, коначних класа, коначних метода, приватних метода, конструктора и уклањање статичких иницијализатора. Главни циљ ПоверМоцк-а је да прошири постојеће АПИ-је са неким методама и напоменама како би обезбедио додатне функције које чине тестирање јединица прилично лаким.

Оквир ПоверМоцк обезбеђује класу тзв ПоверМоцкито користи се за креирање лажних објеката и покреће верификацију и очекивање. ПоверМоцкито пружа функционалност за рад са Јава АПИ рефлексијом.

Хајде да разумемо концепт ПоверМоцк-а уз помоћ примера.

Пример ПоверМоцк-а са Моцкито

Овде ћемо креирати пример ПоверМоцк-а са Моцкито и ЈУнит оквирима. Да бисмо направили пример користећи ПоверМоцк, морамо проћи кроз следеће кораке.

Корак 1: Додајте следеће ПоверМоцк зависности у пом.кмл датотеку.

 org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test 

Корак 2: Примените ПоверМоцк напомене

Да бисмо користили ПоверМоцк са Моцкито, морамо да применимо следеће два напомене у тесту:

@РунВитх(ПоверМоцкРуннер.цласс): То је исто као што смо користили у нашим претходним примерима. Једина разлика је у томе што смо у претходном примеру користили МоцкитоУнитРуннер.цласс, сада ћемо користити ПоверМоцкРуннер.цласс за омогућавање ПоверМоцкито АПИ-ја у тесту.

@ПрепареФорТест: Каже ПоверМоцк-у да припреми неке класе за тестирање. Може се применити и на испитне класе и на појединачне методе испитивања. Укључује класе са завршним, статичким, приватним или изворним методама које се могу исмевати.

 @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { } 

Напомена: Горња два корака су обавезна за све примере које ћемо креирати користећи ПоверМоцк.

Постоје следећи примери ПоверМоцк-а са Моцкито и ЈУнит оквирима.

1. Ругање статична методе

У следећем примеру ћемо се ругати статична методе.

Корак 1: Направите класу која садржи а статична методом. Направили смо класу са именом Корисност.

Утилити.јава

 public class Utility { public static String staticMethod(String call) { return call; } } 

Корак 2: Креирајте ЈУнит тест случај, под називом Повермоцк_тест, у сврху тестирања.

Повермоцк_тест.јава

 import static junit.framework.Assert.assertEquals; 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; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestStaticMethod_WithPowerMockito() { String call = ' Hi there, I'm using PowerMock with Mockito '; String callexpectation = ' Call Expectation for you. '; PowerMockito.mockStatic(Utility.class); PowerMockito.when(Utility.staticMethod(call)).thenReturn(callexpectation); String actualcall = Utility.staticMethod(call); assertEquals(callexpectation, actualcall); } } 

Излаз

Следећи излаз показује да је тест успешно покренут.

Пример ПоверМоцк-а са Моцкито

Такође можемо да проверимо да ли је статичка метода позвана или не, користећи верифиСтатиц() методом ПоверМоцкито, као што је приказано у наставку.

 PowerMockito.verifyStatic(); Utility.staticMethod(call); 

2. Ругање приватни методе

У следећем примеру, направићемо имитацију приватни методе.

Корак 1: Креирајте класу која садржи приватни метод. Направили смо класу са именом Корисност и дефинисано а приватни метод и јавни метод (који враћа објекат приватне методе).

Утилити.јава

 public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } } 

Корак 2: Креирајте ЈУнит тест случај под називом ПоверМоцк_тест у сврху тестирања.

Повермоцк_тест.јава

 import static junit.framework.Assert.assertEquals; 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; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestPrivateMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; String expectedmessage = ' Using with EasyMock '; Utility mock =PowerMockito.spy(new Utility()); PowerMockito.doReturn(expectedmessage).when(mock, 'privateMethod', message); String actualmessage = mock.callPrivateMethod(message); assertEquals(expectedmessage, actualmessage); System.out.println(PowerMockito.verifyPrivate(getClass())); } } 

Излаз

Следећи излаз показује да је тест успешно покренут.

Пример ПоверМоцк-а са Моцкито

3. Ругање коначни методе

У следећем примеру ћемо се ругати коначни методе.

Корак 1: Направите класу која садржи а коначни методом. Направили смо класу са именом Утилити и дефинисали коначну методу под називом финалМетход.

Утилити.јава

 public class Utility { public final String finalMethod(String message) { return message; } } 

Корак 2: Креирајте ЈУнит тест случај под називом Повермоцк_тест за потребе тестирања.

Повермоцк_тест.јава

 import static junit.framework.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { @Test public void TestFinalMethod_WithPowerMock() throws Exception { String message = ' PowerMock with Mockito and JUnit '; Utility uti = PowerMockito.mock(Utility.class); PowerMockito.whenNew(Utility.class).withNoArguments().thenReturn(uti); Utility uti2 = new Utility(); PowerMockito.verifyNew(Utility.class).withNoArguments(); PowerMockito.when(uti2.finalMethod(message)).thenReturn(message); String message2 = uti2.finalMethod(message); Mockito.verify(uti2).finalMethod(message); assertEquals(message, message2); } } 

Излаз

шта је азбучни број

Следећи излаз показује да је тест успешно покренут.

Пример ПоверМоцк-а са Моцкито