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.
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.
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.