logo

PowerMock

PowerMock er et åpen kildekode Java-rammeverk som brukes til å lage et falskt objekt i enhetstesting. Den utvider andre hånlige rammer som EasyMock og Mockito for å forbedre mulighetene. PowerMock-rammeverket bruker en tilpasset klasselaster og bytekode-manipulasjonsteknikker for å muliggjøre hån av statiske metoder, endelige klasser, endelige metoder, private metoder, konstruktør og fjerning av statiske initialiseringer. Hovedmålet med PowerMock er å utvide de eksisterende API-ene med noen metoder og merknader for å gi ekstra funksjoner som gjør enhetstesting ganske enkelt.

PowerMock-rammeverket gir en klasse kalt PowerMockito brukes til å lage falske objekter og initierer verifisering og forventning. PowerMockito gir funksjonaliteten til å jobbe med Java-refleksjons-API.

La oss forstå konseptet med PowerMock ved hjelp av et eksempel.

for loop i c

Eksempel på PowerMock med Mockito

Her skal vi lage et eksempel på PowerMock med Mockito- og JUnit-rammeverk. For å lage et eksempel ved å bruke PowerMock, må vi gå gjennom følgende trinn.

Trinn 1: Legg til følgende PowerMock-avhengigheter i pom.xml-filen.

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

Steg 2: Bruk PowerMock-kommentarene

For å bruke PowerMock med Mockito, må vi bruke følgende to merknader i testen:

@RunWith(PowerMockRunner.class): Det er det samme som vi har brukt i våre tidligere eksempler. Den eneste forskjellen er at vi i forrige eksempel har brukt MockitoUnitRunner.class, nå vil vi bruke PowerMockRunner.class for å aktivere PowerMockito APIene i testen.

@PrepareForTest: Det forteller PowerMock å forberede noen klasser for testing. Den kan brukes på både testklassene og de enkelte testmetodene. Den inkluderer klasser med endelige, statiske, private eller innfødte metoder som kan hånes.

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

Merk: De to ovennevnte trinnene er obligatoriske for alle eksemplene vi skal lage med PowerMock.

Det er følgende eksempler på PowerMock med Mockito- og JUnit-rammeverk.

1. Spot statisk metoder

I det følgende eksempelet skal vi håne statisk metoder.

Trinn 1: Lag en klasse som inneholder en statisk metode. Vi har laget en klasse med navnet Nytte.

Utility.java

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

Steg 2: Opprett en JUnit-testsak, kalt Powermock_test, for testformål.

markdown fotnoter

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

Produksjon

Følgende utdata viser at testen er vellykket.

Eksempel på PowerMock med Mockito

Vi kan også bekrefte at den statiske metoden kalles eller ikke, ved å bruke verifyStatic() metoden til PowerMockito, som vist nedenfor.

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

2. Spot privat metoder

I det følgende eksempelet vil vi lage en hån av privat metoder.

Trinn 1: Lag en klasse som inneholder en privat metode. Vi har laget klasse med navnet Nytte og definerte a privat metode og en offentlig metode (som returnerer objektet til privat metode).

Utility.java

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

Steg 2: Opprett en JUnit-testsak kalt PowerMock_test for testformål.

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

Produksjon

Følgende utdata viser at testen er vellykket.

Eksempel på PowerMock med Mockito

3. Spot endelig metoder

I det følgende eksempelet skal vi håne endelig metoder.

Trinn 1: Lag en klasse som inneholder en endelig metode. Vi har laget en klasse med navnet Utility og definert en endelig metode kalt endelig metode.

sjekk java-versjonen på linux

Utility.java

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

Steg 2: Opprett en JUnit-testsak kalt Powermock_test for testformål.

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

Produksjon

Følgende utdata viser at testen er vellykket.

Eksempel på PowerMock med Mockito