PowerMock är ett Java-ramverk med öppen källkod som används för att skapa ett skenobjekt i enhetstestning. Det utökar andra hånfulla ramverk som EasyMock och Mockito för att förbättra kapaciteten. PowerMock-ramverket använder en anpassad klassladdare och bytekodmanipuleringstekniker för att möjliggöra hån mot statiska metoder, slutklasser, slutmetoder, privata metoder, konstruktor och borttagning av statiska initierare. Huvudsyftet med PowerMock är att utöka de befintliga API:erna med några metoder och anteckningar för att tillhandahålla extra funktioner som gör enhetstestning ganska enkel.
PowerMock-ramverket tillhandahåller en klass som heter PowerMockito används för att skapa skenobjekt och initierar verifiering och förväntan. PowerMockito tillhandahåller funktionaliteten för att arbeta med Java reflection API.
Låt oss förstå konceptet PowerMock med hjälp av ett exempel.
Exempel på PowerMock med Mockito
Här kommer vi att skapa ett exempel på PowerMock med Mockito- och JUnit-ramverk. För att skapa ett exempel med PowerMock måste vi gå igenom följande steg.
Steg 1: Lägg till följande PowerMock-beroenden i filen pom.xml.
genomgång av binärt träd i ordning
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
Steg 2: Använd PowerMock-anteckningarna
För att använda PowerMock med Mockito måste vi tillämpa följande två anteckningar i testet:
@RunWith(PowerMockRunner.class): Det är samma som vi har använt i våra tidigare exempel. Den enda skillnaden är att vi i det tidigare exemplet har använt MockitoUnitRunner.class, nu kommer vi att använda PowerMockRunner.class för att aktivera PowerMockito API:erna i testet.
@PrepareForTest: Det säger åt PowerMock att förbereda några klasser för testning. Det kan appliceras på både testklasserna och de enskilda testmetoderna. Det inkluderar klasser med slutliga, statiska, privata eller inhemska metoder som kan hånas.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
Obs: Ovanstående två steg är obligatoriska för alla exempel vi ska skapa med PowerMock.
Det finns följande exempel på PowerMock med Mockito- och JUnit-ramverk.
1. Hånande statisk metoder
I följande exempel ska vi håna statisk metoder.
Steg 1: Skapa en klass som innehåller en statisk metod. Vi har skapat en klass med namnet Verktyg.
vilka månader är q3
Utility.java
mylivecricket in
public class Utility { public static String staticMethod(String call) { return call; } }
Steg 2: Skapa ett JUnit-testfall, med namnet Powermock_test, för teständamål.
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); } }
Produktion
Följande utdata visar att testet körs framgångsrikt.
Vi kan också verifiera att den statiska metoden anropas eller inte, genom att använda verifyStatic() metoden för PowerMockito, som visas nedan.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. Hånande privat metoder
I följande exempel kommer vi att skapa en låtsas av privat metoder.
Steg 1: Skapa en klass som innehåller en privat metod. Vi har skapat klass med namnet Verktyg och definierade a privat metod och en offentlig metod (som returnerar objektet för privat metod).
Utility.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
Steg 2: Skapa ett JUnit-testfall med namnet PowerMock_test för teständamål.
har nästa java
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())); } }
Produktion
Följande utdata visar att testet körs framgångsrikt.
3. Hånande slutlig metoder
I följande exempel ska vi håna slutlig metoder.
Steg 1: Skapa en klass som innehåller en slutlig metod. Vi har skapat en klass med namnet Utility och definierat en sista metod som heter slutlig metod.
vad är en monitor
Utility.java
public class Utility { public final String finalMethod(String message) { return message; } }
Steg 2: Skapa ett JUnit-testfall med namnet Powermock_test för teständamål.
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); } }
Produktion
Följande utdata visar att testet körs framgångsrikt.