logo

PowerMock

PowerMock je Java okvir otvorenog koda koji se koristi za stvaranje lažnog objekta u jediničnom testiranju. Proširuje druge okvire za ismijavanje kao što su EasyMock i Mockito kako bi poboljšao mogućnosti. Okvir PowerMock koristi prilagođeni učitavač klasa i tehnike manipulacije bajt-kodom kako bi omogućio ismijavanje statičkih metoda, finalnih klasa, finalnih metoda, privatnih metoda, konstruktora i uklanjanje statičkih inicijalizatora. Glavni cilj PowerMocka je proširiti postojeće API-je s nekim metodama i komentarima kako bi se pružile dodatne značajke koje testiranje jedinice čine prilično lakim.

Okvir PowerMock pruža klasu tzv PowerMockito koristi se za stvaranje lažnih objekata i pokreće provjeru i očekivanje. PowerMockito pruža funkcionalnost za rad s Java refleksijskim API-jem.

Razumimo koncept PowerMocka uz pomoć primjera.

Primjer PowerMocka s Mockitom

Ovdje ćemo stvoriti primjer PowerMocka s okvirima Mockito i JUnit. Da bismo izradili primjer koristeći PowerMock, moramo proći kroz sljedeće korake.

Korak 1: Dodajte sljedeće PowerMock ovisnosti u datoteku pom.xml.

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

Korak 2: Primijenite PowerMock komentare

Da bismo koristili PowerMock s Mockitom, moramo primijeniti sljedeće dva napomene u testu:

@RunWith(PowerMockRunner.class): Isti je kao što smo koristili u prethodnim primjerima. Jedina razlika je u tome što smo u prethodnom primjeru koristili MockitoUnitRunner.class, sada ćemo koristiti PowerMockRunner.class za omogućavanje PowerMockito API-ja u testu.

@PripremiZaTest: Kaže PowerMocku da pripremi neke klase za testiranje. Može se primijeniti i na ispitne razrede i na pojedinačne ispitne metode. Uključuje klase s finalnim, statičnim, privatnim ili izvornim metodama koje se mogu ismijavati.

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

Napomena: Gornja dva koraka obavezna su za sve primjere koje ćemo izraditi pomoću PowerMocka.

Postoje sljedeći primjeri PowerMocka s okvirima Mockito i JUnit.

1. Ruganje statički metode

U sljedećem primjeru ćemo se rugati statički metode.

Korak 1: Napravite klasu koja sadrži a statički metoda. Napravili smo klasu s imenom Korisnost.

Uslužni program.java

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

Korak 2: Stvorite JUnit test slučaj pod nazivom Powermock_test, u svrhu testiranja.

linux arhitektura

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

Izlaz

Sljedeći izlaz pokazuje da se test uspješno izvodi.

Primjer PowerMocka s Mockitom

Također možemo provjeriti je li statička metoda pozvana ili ne, koristeći provjeriStatic() metodu PowerMockito, kao što je prikazano u nastavku.

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

2. Ruganje privatna metode

U sljedećem primjeru stvorit ćemo ismijavanje privatna metode.

Korak 1: Napravite klasu koja sadrži privatnu metodu. Napravili smo klasu s imenom Korisnost i definiran a privatna metoda i javna metoda (koja vraća objekt privatne metode).

Uslužni program.java

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

Korak 2: Stvorite JUnit test slučaj pod nazivom PowerMock_test u svrhu 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())); } } 

Izlaz

Sljedeći izlaz pokazuje da se test uspješno izvodi.

Primjer PowerMocka s Mockitom

3. Ruganje konačni metode

U sljedećem primjeru ćemo se rugati konačni metode.

Korak 1: Napravite klasu koja sadrži a konačni metoda. Stvorili smo klasu s imenom Utility i definirali konačnu metodu pod nazivom finalMethod.

Uslužni program.java

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

Korak 2: Stvorite JUnit test slučaj pod nazivom Powermock_test za potrebe 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); } } 

Izlaz

Sljedeći izlaz pokazuje da se test uspješno izvodi.

Primjer PowerMocka s Mockitom