logo

PowerMock

PowerMock on avoimen lähdekoodin Java-kehys, jota käytetään valeobjektin luomiseen yksikkötestauksessa. Se laajentaa muita pilkkaavia puitteita, kuten EasyMockia ja Mockitoa, parantaakseen ominaisuuksia. PowerMock-kehys käyttää mukautettua luokanlataajaa ja tavukoodinkäsittelytekniikoita mahdollistaakseen staattisten menetelmien, lopullisten luokkien, lopullisten menetelmien, yksityisten menetelmien, konstruktorin ja staattisten alustajien poistamisen pilkkaamisen. PowerMockin päätavoitteena on laajentaa olemassa olevia API:ita joillakin menetelmillä ja huomautuksilla tarjotakseen lisäominaisuuksia, jotka tekevät yksikkötestauksesta melko helppoa.

PowerMock-kehys tarjoaa luokan nimeltä PowerMockito käytetään pilkattujen objektien luomiseen ja käynnistää varmennuksen ja odotuksen. PowerMockito tarjoaa toiminnot, jotka toimivat Java-heijastussovellusliittymän kanssa.

Ymmärretään PowerMockin käsite esimerkin avulla.

Esimerkki PowerMockista Mockiton kanssa

Tässä aiomme luoda esimerkin PowerMockista Mockito- ja JUnit-kehysten kanssa. Jos haluat luoda esimerkin PowerMockilla, meidän on suoritettava seuraavat vaiheet.

Vaihe 1: Lisää seuraavat PowerMock-riippuvuudet pom.xml-tiedostoon.

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

Vaihe 2: Käytä PowerMock-merkintöjä

Käyttääksemme PowerMockia Mockiton kanssa meidän on sovellettava seuraavaa kaksi kommentit testissä:

@RunWith(PowerMockRunner.class): Se on sama kuin aiemmissa esimerkeissämme. Ainoa ero on, että edellisessä esimerkissä käytimme MockitoUnitRunner.classa, nyt käytämme PowerMockRunner.classia PowerMockito API:iden käyttöönottamiseksi testissä.

@PrepareForTest: Se käskee PowerMockia valmistelemaan joitain luokkia testausta varten. Sitä voidaan soveltaa sekä testiluokkiin että yksittäisiin testimenetelmiin. Se sisältää luokkia, joissa on lopullisia, staattisia, yksityisiä tai natiivimenetelmiä, joita voidaan pilkata.

123moviesin kaltaiset elokuvasivustot
 @RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { } 

Huomautus: Yllä olevat kaksi vaihetta ovat pakollisia kaikille esimerkeille, jotka aiomme luoda PowerMockilla.

Seuraavassa on esimerkkejä PowerMockista Mockito- ja JUnit-kehysten kanssa.

1. Pilkkaaminen staattinen menetelmiä

Seuraavassa esimerkissä pilkkaamme staattinen menetelmiä.

Vaihe 1: Luo luokka, joka sisältää a staattinen menetelmä. Olemme luoneet luokan nimellä Apuohjelma.

Utility.java

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

Vaihe 2: Luo JUnit-testitapaus, nimeltään Powermock_test, testaustarkoituksiin.

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

Lähtö

Seuraava tulos osoittaa, että testi on onnistunut.

Esimerkki PowerMockista Mockiton kanssa

Voimme myös varmistaa, että staattista menetelmää kutsutaan vai ei, käyttämällä verifyStatic() PowerMockiton menetelmä, kuten alla on esitetty.

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

2. Pilkkaaminen yksityinen menetelmiä

Seuraavassa esimerkissä luomme pilkan yksityinen menetelmiä.

Vaihe 1: Luo luokka, joka sisältää yksityisen menetelmän. Olemme luoneet luokan nimellä Apuohjelma ja määriteltiin a yksityinen menetelmä ja julkinen menetelmä (joka palauttaa yksityisen menetelmän objektin).

Utility.java

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

Vaihe 2: Luo JUnit-testitapaus nimeltä PowerMock_test testaustarkoituksiin.

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

Lähtö

Seuraava tulos osoittaa, että testi on onnistunut.

Esimerkki PowerMockista Mockiton kanssa

3. Pilkkaaminen lopullinen menetelmiä

Seuraavassa esimerkissä pilkkaamme lopullinen menetelmiä.

Vaihe 1: Luo luokka, joka sisältää a lopullinen menetelmä. Olemme luoneet luokan nimeltä Utility ja määritelleet lopullisen menetelmän nimeltä lopullinen menetelmä.

Utility.java

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

Vaihe 2: Luo JUnit-testitapaus nimeltä Powermock_test testaustarkoituksiin.

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

Lähtö

Seuraava tulos osoittaa, että testi on onnistunut.

Esimerkki PowerMockista Mockiton kanssa