logo

PowerMock

PowerMock er en open source Java-ramme, der bruges til at skabe et mock-objekt i enhedstestning. Det udvider andre hånlige rammer såsom EasyMock og Mockito for at forbedre mulighederne. PowerMock-rammen bruger en brugerdefineret klasseindlæser og bytekode-manipulationsteknikker til at muliggøre hån mod statiske metoder, endelige klasser, endelige metoder, private metoder, konstruktør og fjernelse af statiske initialiseringer. Hovedformålet med PowerMock er at udvide de eksisterende API'er med nogle metoder og annoteringer for at give ekstra funktioner, der gør enhedstest ret nemt.

PowerMock-rammen giver en klasse kaldet PowerMockito bruges til at skabe falske objekter og igangsætter verifikation og forventning. PowerMockito giver funktionaliteten til at arbejde med Java reflection API.

Lad os forstå konceptet PowerMock ved hjælp af et eksempel.

dhanashree verma

Eksempel på PowerMock med Mockito

Her skal vi lave et eksempel på PowerMock med Mockito- og JUnit-frameworks. For at oprette et eksempel ved hjælp af PowerMock skal vi gennemgå følgende trin.

Trin 1: Tilføj følgende PowerMock-afhængigheder i filen pom.xml.

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

Trin 2: Anvend PowerMock-annoteringerne

For at bruge PowerMock med Mockito skal vi anvende følgende to anmærkninger i testen:

@RunWith(PowerMockRunner.class): Det er det samme, som vi har brugt i vores tidligere eksempler. Den eneste forskel er, at vi i det foregående eksempel har brugt MockitoUnitRunner.class, nu vil vi bruge PowerMockRunner.class til at aktivere PowerMockito API'erne i testen.

@PrepareForTest: Det fortæller PowerMock at forberede nogle klasser til test. Det kan anvendes på både testklasserne og de enkelte testmetoder. Det inkluderer klasser med endelige, statiske, private eller native metoder, der kan hånes.

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

Bemærk: Ovenstående to trin er obligatoriske for alle de eksempler, vi skal lave ved hjælp af PowerMock.

Der er følgende eksempler på PowerMock med Mockito og JUnit rammer.

1. Spot statisk metoder

I det følgende eksempel skal vi håne statisk metoder.

Trin 1: Opret en klasse, der indeholder en statisk metode. Vi har lavet en klasse med navnet Utility.

Utility.java

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

Trin 2: Opret en JUnit-testcase, navngivet Powermock_test, til testformål.

markdown fodnoter

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ølgende output viser, at testen kører med succes.

Eksempel på PowerMock med Mockito

Vi kan også verificere, at den statiske metode kaldes eller ej, ved at bruge verifyStatic() metode til PowerMockito, som vist nedenfor.

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

2. Spot privat metoder

I det følgende eksempel vil vi lave en hån af privat metoder.

Trin 1: Opret en klasse, der indeholder en privat metode. Vi har lavet klasse med navnet Utility og defineret en privat metode og en offentlig metode (der returnerer objektet for privat metode).

Utility.java

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

Trin 2: Opret en JUnit-testcase med navnet PowerMock_test til testformå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 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ølgende output viser, at testen kører med succes.

Eksempel på PowerMock med Mockito

3. Spot endelig metoder

I det følgende eksempel skal vi håne endelig metoder.

Trin 1: Opret en klasse, der indeholder en endelig metode. Vi har lavet en klasse med navnet Utility og defineret en endelig metode med navnet endelig metode.

boolesk til streng

Utility.java

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

Trin 2: Opret en JUnit-testcase med navnet Powermock_test til testformå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ølgende output viser, at testen kører med succes.

Eksempel på PowerMock med Mockito