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.
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.
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.