PowerMock

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.

 @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