PowerMock ir atvērtā pirmkoda Java ietvars, ko izmanto, lai izveidotu viltus objektu vienības testēšanā. Tas paplašina citus izsmejošus ietvarus, piemēram, EasyMock un Mockito, lai uzlabotu iespējas. PowerMock ietvars izmanto pielāgotu klases ielādētāju un baitkoda manipulācijas metodes, lai iespējotu statisko metožu, galīgo klašu, galīgo metožu, privāto metožu, konstruktoru un statisko inicializatoru noņemšanu. PowerMock galvenais mērķis ir paplašināt esošās API ar dažām metodēm un anotācijām, lai nodrošinātu papildu funkcijas, kas padara vienību testēšanu diezgan vienkāršu.
PowerMock ietvars nodrošina klasi ar nosaukumu PowerMockito izmanto, lai izveidotu viltus objektus un uzsāktu verifikāciju un gaidīšanu. PowerMockito nodrošina funkcionalitāti darbam ar Java refleksijas API.
Izpratīsim PowerMock jēdzienu ar piemēra palīdzību.
PowerMock ar Mockito piemērs
Šeit mēs izveidosim PowerMock piemēru ar Mockito un JUnit ietvariem. Lai izveidotu piemēru, izmantojot PowerMock, mums ir jāveic šādas darbības.
1. darbība: Pievienojiet tālāk norādītās PowerMock atkarības pom.xml failā.
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
2. darbība: Izmantojiet PowerMock anotācijas
Lai izmantotu PowerMock ar Mockito, mums ir jāpiemēro tālāk norādītais divi anotācijas testā:
@RunWith(PowerMockRunner.class): Tas ir tas pats, ko mēs izmantojām savos iepriekšējos piemēros. Vienīgā atšķirība ir tāda, ka iepriekšējā piemērā mēs izmantojām MockitoUnitRunner.class, tagad mēs izmantosim PowerMockRunner.class, lai testā iespējotu PowerMockito API.
@PrepareForTest: Tas liek PowerMock sagatavot dažas nodarbības testēšanai. To var piemērot gan testa klasēm, gan atsevišķām pārbaudes metodēm. Tajā ir iekļautas nodarbības ar galīgām, statiskām, privātām vai vietējām metodēm, par kurām var izsmiet.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
Piezīme. Iepriekš minētās divas darbības ir obligātas visiem piemēriem, ko veidosim, izmantojot PowerMock.
Ir šādi PowerMock piemēri ar Mockito un JUnit ietvariem.
1. ņirgāšanās statisks metodes
Nākamajā piemērā mēs ņirgāsimies statisks metodes.
1. darbība: Izveidojiet klasi, kurā ir a statisks metodi. Mēs esam izveidojuši klasi ar nosaukumu Lietderība.
kā jaunināt java
Utility.java
public class Utility { public static String staticMethod(String call) { return call; } }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu Powermock_test, pārbaudes nolūkos.
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); } }
Izvade
Nākamā izvade parāda, ka tests ir veiksmīgi izpildīts.
Mēs varam arī pārbaudīt, vai statiskā metode ir izsaukta vai nē, izmantojot verifyStatic() PowerMockito metodi, kā parādīts zemāk.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. ņirgāšanās Privāts metodes
Nākamajā piemērā mēs izveidosim maketu Privāts metodes.
1. darbība: Izveidojiet klasi, kurā ir privāta metode. Mēs esam izveidojuši klasi ar nosaukumu Lietderība un definēja a Privāts metodi un publisko metodi (kas atgriež privātās metodes objektu).
Utility.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu PowerMock_test pārbaudes nolūkos.
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())); } }
Izvade
Nākamā izvade parāda, ka tests ir veiksmīgi izpildīts.
3. ņirgāšanās galīgais metodes
Nākamajā piemērā mēs ņirgāsimies galīgais metodes.
1. darbība: Izveidojiet klasi, kurā ir a galīgais metodi. Mēs esam izveidojuši klasi ar nosaukumu Utility un definējuši galīgo metodi ar nosaukumu galīgā metode.
Utility.java
public class Utility { public final String finalMethod(String message) { return message; } }
2. darbība: Izveidojiet JUnit testa gadījumu ar nosaukumu Powermock_test testēšanas nolūkos.
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); } }
Izvade
Nākamā izvade parāda, ka tests ir veiksmīgi izpildīts.