logo

PowerMock

PowerMock je open-source Java framework, ktorý sa používa na vytváranie falošného objektu pri testovaní jednotiek. Rozširuje ďalšie simulačné rámce, ako sú EasyMock a Mockito, aby sa zlepšili možnosti. Rámec PowerMock používa vlastný načítač tried a techniky manipulácie s bajtovým kódom na umožnenie zosmiešňovania statických metód, finálnych tried, konečných metód, súkromných metód, konštruktora a odstraňovania statických inicializátorov. Hlavným cieľom PowerMock je rozšíriť existujúce API o niektoré metódy a anotácie, aby poskytli ďalšie funkcie, vďaka ktorým je testovanie jednotiek celkom jednoduché.

Rámec PowerMock poskytuje triedu tzv PowerMockito používa sa na vytváranie falošných objektov a spúšťa overovanie a očakávanie. PowerMockito poskytuje funkcie na prácu s rozhraním API reflexie Java.

Poďme pochopiť koncept PowerMock pomocou príkladu.

príkaz java

Príklad PowerMock s Mockito

Tu vytvoríme príklad PowerMock s rámcami Mockito a JUnit. Aby sme vytvorili príklad pomocou PowerMock, musíme prejsť nasledujúcimi krokmi.

Krok 1: Pridajte nasledujúce závislosti PowerMock do súboru pom.xml.

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

Krok 2: Použite anotácie PowerMock

Ak chcete použiť PowerMock s Mockito, musíme použiť nasledujúce dva anotácie v teste:

@RunWith(PowerMockRunner.class): Je to rovnaké, ako sme použili v našich predchádzajúcich príkladoch. Jediný rozdiel je v tom, že v predchádzajúcom príklade sme použili MockitoUnitRunner.class, teraz použijeme PowerMockRunner.class na povolenie API PowerMockito v teste.

@PrepareForTest: Hovorí PowerMock, aby pripravil niekoľko tried na testovanie. Dá sa aplikovať na testovacie triedy aj na jednotlivé testovacie metódy. Zahŕňa triedy s konečnými, statickými, súkromnými alebo natívnymi metódami, ktoré možno zosmiešňovať.

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

Poznámka: Vyššie uvedené dva kroky sú povinné pre všetky príklady, ktoré vytvoríme pomocou PowerMock.

Nasledujú príklady PowerMock s rámcami Mockito a JUnit.

1. Výsmech statické metódy

V nasledujúcom príklade sa budeme vysmievať statické metódy.

Krok 1: Vytvorte triedu, ktorá obsahuje a statické metóda. Vytvorili sme triedu s názvom Utility.

Utility.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom Powermock_test, na testovacie účely.

Powermock_test.java

 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); } } 

Výkon

Nasledujúci výstup ukazuje, že test prebieha úspešne.

Príklad PowerMock s Mockito

Môžeme tiež overiť, či je statická metóda volaná alebo nie, pomocou overStatic() metóda PowerMockito, ako je uvedené nižšie.

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

2. Výsmech súkromné metódy

V nasledujúcom príklade vytvoríme maketu súkromné metódy.

Krok 1: Vytvorte triedu, ktorá obsahuje súkromnú metódu. Vytvorili sme triedu s názvom Utility a definované a súkromné metóda a verejná metóda (ktorá vracia objekt súkromnej metódy).

Utility.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom PowerMock_test na testovacie účely.

Powermock_test.java

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

Výkon

Nasledujúci výstup ukazuje, že test prebieha úspešne.

Príklad PowerMock s Mockito

3. Výsmech Konečný metódy

V nasledujúcom príklade sa budeme vysmievať Konečný metódy.

Krok 1: Vytvorte triedu, ktorá obsahuje a Konečný metóda. Vytvorili sme triedu s názvom Utility a definovali konečnú metódu s názvom konečná metóda.

Utility.java

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

Krok 2: Vytvorte testovací prípad JUnit s názvom Powermock_test na testovacie účely.

Powermock_test.java

 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); } } 

Výkon

Nasledujúci výstup ukazuje, že test prebieha úspešne.

Príklad PowerMock s Mockito