logo

PowerMock

PowerMock je odprtokodno ogrodje Java, ki se uporablja za ustvarjanje lažnega objekta pri testiranju enote. Razširja druga posmehljiva ogrodja, kot sta EasyMock in Mockito, za izboljšanje zmogljivosti. Ogrodje PowerMock uporablja nalagalnik razredov po meri in tehnike manipulacije z bajtno kodo, da omogoči norčevanje iz statičnih metod, končnih razredov, končnih metod, zasebnih metod, konstruktorja in odstranitev statičnih inicializatorjev. Glavni cilj PowerMocka je razširiti obstoječe API-je z nekaterimi metodami in opombami za zagotavljanje dodatnih funkcij, ki olajšajo testiranje enot.

Ogrodje PowerMock ponuja razred, imenovan PowerMockito uporablja se za ustvarjanje lažnih objektov in sproži preverjanje in pričakovanje. PowerMockito zagotavlja funkcionalnost za delo z API-jem za refleksijo Java.

Razumejmo koncept PowerMock s pomočjo primera.

Primer PowerMock z Mockito

Tukaj bomo ustvarili primer PowerMocka z okvirji Mockito in JUnit. Če želimo ustvariti primer z uporabo PowerMocka, moramo opraviti naslednje korake.

Korak 1: Dodajte naslednje odvisnosti PowerMock v datoteko pom.xml.

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

2. korak: Uporabite opombe PowerMock

Za uporabo PowerMocka z Mockitom moramo uporabiti naslednje dva opombe v testu:

java jedro java

@RunWith(PowerMockRunner.class): Enako je, kot smo ga uporabili v prejšnjih primerih. Edina razlika je v tem, da smo v prejšnjem primeru uporabili MockitoUnitRunner.class, zdaj pa bomo uporabili PowerMockRunner.class za omogočanje API-jev PowerMockito v testu.

@PrepareForTest: Pove PowerMocku, naj pripravi nekaj razredov za testiranje. Uporablja se lahko tako za testne razrede kot za posamezne testne metode. Vključuje razrede s končnimi, statičnimi, zasebnimi ali izvornimi metodami, ki jih je mogoče zasmehovati.

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

Opomba: Zgornja dva koraka sta obvezna za vse primere, ki jih bomo ustvarili z uporabo PowerMocka.

Obstajajo naslednji primeri PowerMock z ogrodji Mockito in JUnit.

1. Posmehovanje statična metode

V naslednjem primeru se bomo posmehovali statična metode.

Korak 1: Ustvarite razred, ki vsebuje a statična metoda. Ustvarili smo razred z imenom Pripomoček.

Utility.java

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

2. korak: Ustvarite testni primer JUnit z imenom Powermock_test, za namen testiranja.

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

Izhod

Naslednji izhod kaže, da se preizkus uspešno izvaja.

Primer PowerMock z Mockito

Prav tako lahko preverimo, ali je statična metoda poklicana ali ne, z uporabo verifyStatic() metodo PowerMockito, kot je prikazano spodaj.

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

2. Norčevanje zasebno metode

V naslednjem primeru bomo ustvarili ponaredek zasebno metode.

Korak 1: Ustvarite razred, ki vsebuje zasebno metodo. Ustvarili smo razred z imenom Pripomoček in definiral a zasebno metoda in javna metoda (ki vrne objekt zasebne metode).

Utility.java

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

2. korak: Ustvarite testni primer JUnit z imenom PowerMock_test za namen testiranja.

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

Izhod

Naslednji izhod kaže, da se preizkus uspešno izvaja.

Primer PowerMock z Mockito

3. Norčevanje dokončno metode

V naslednjem primeru se bomo posmehovali dokončno metode.

Korak 1: Ustvarite razred, ki vsebuje a dokončno metoda. Ustvarili smo razred z imenom Utility in definirali končno metodo z imenom finalMethod.

Utility.java

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

2. korak: Ustvarite testni primer JUnit z imenom Powermock_test za namene testiranja.

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

Izhod

Naslednji izhod kaže, da se preizkus uspešno izvaja.

Primer PowerMock z Mockito