logo

PowerMock

PowerMock is een open-source Java-framework dat wordt gebruikt voor het maken van een nepobject bij het testen van eenheden. Het breidt andere spotframeworks zoals EasyMock en Mockito uit om de mogelijkheden te verbeteren. Het PowerMock-framework maakt gebruik van een aangepaste classloader en bytecode-manipulatietechnieken om het bespotten van statische methoden, definitieve klassen, definitieve methoden, privémethoden, constructor en verwijdering van statische initialisatoren mogelijk te maken. Het belangrijkste doel van PowerMock is om de bestaande API's uit te breiden met een aantal methoden en annotaties om extra functies te bieden die het testen van eenheden vrij eenvoudig maken.

Het PowerMock-framework biedt een klasse genaamd PowerMockito gebruikt om nepobjecten te maken en initieert verificatie en verwachting. De PowerMockito biedt de functionaliteit om met de Java-reflectie-API te werken.

Laten we het concept van PowerMock begrijpen met behulp van een voorbeeld.

10 van 40

Voorbeeld van PowerMock met Mockito

Hier gaan we een voorbeeld van PowerMock maken met Mockito- en JUnit-frameworks. Om een ​​voorbeeld te maken met PowerMock, moeten we de volgende stappen doorlopen.

Stap 1: Voeg de volgende PowerMock-afhankelijkheden toe aan het bestand pom.xml.

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

Stap 2: Pas de PowerMock-annotaties toe

Om PowerMock met Mockito te gebruiken, moeten we het volgende toepassen twee annotaties in de test:

@RunWith(PowerMockRunner.klasse): Het is hetzelfde als we in onze vorige voorbeelden hebben gebruikt. Het enige verschil is dat we in het vorige voorbeeld MockitoUnitRunner.class hebben gebruikt, nu zullen we PowerMockRunner.class gebruiken om de PowerMockito API's in de test in te schakelen.

@PrepareForTest: Het vertelt PowerMock om een ​​aantal lessen voor te bereiden op testen. Het kan worden toegepast op zowel de testklassen als de individuele testmethoden. Het omvat klassen met definitieve, statische, privé- of native methoden die kunnen worden bespot.

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

Opmerking: de bovenstaande twee stappen zijn verplicht voor alle voorbeelden die we gaan maken met PowerMock.

Er zijn de volgende voorbeelden van PowerMock met Mockito- en JUnit-frameworks.

applet-applet

1. Spotten statisch methoden

In het volgende voorbeeld gaan we spotten statisch methoden.

Stap 1: Maak een klasse die a bevat statisch methode. We hebben een klasse gemaakt met de naam Nutsvoorziening.

Hulpprogramma.java

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

Stap 2: Maak een JUnit-testcase met de naam Powermock_test, voor testdoeleinden.

Powermock_test.java

tekenreeks omzetten in geheel getal
 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); } } 

Uitvoer

Uit de volgende uitvoer blijkt dat de test met succes is uitgevoerd.

Voorbeeld van PowerMock met Mockito

We kunnen ook verifiëren of de statische methode wordt aangeroepen of niet, door gebruik te maken van de verificatieStatisch() methode van PowerMockito, zoals hieronder weergegeven.

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

2. Spotten privaat methoden

In het volgende voorbeeld maken we een mock-up van privaat methoden.

Stap 1: Maak een klasse die een privémethode bevat. We hebben een klasse gemaakt met de naam Nutsvoorziening en definieerde een privaat methode en een openbare methode (die het object van de privémethode retourneert).

Hulpprogramma.java

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

Stap 2: Maak een JUnit-testcase met de naam PowerMock_test voor testdoeleinden.

reactjs kaart

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

Uitvoer

Uit de volgende uitvoer blijkt dat de test met succes is uitgevoerd.

Voorbeeld van PowerMock met Mockito

3. Spotten laatste methoden

In het volgende voorbeeld gaan we spotten laatste methoden.

Stap 1: Maak een klasse die a bevat laatste methode. We hebben een klasse gemaakt met de naam Utility en een definitieve methode gedefinieerd met de naam definitieveMethode.

fibonaccireeks in c

Hulpprogramma.java

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

Stap 2: Maak een JUnit-testcase met de naam Powermock_test voor testdoeleinden.

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

Uitvoer

Uit de volgende uitvoer blijkt dat de test met succes is uitgevoerd.

Voorbeeld van PowerMock met Mockito