PowerMock este un cadru Java open-source utilizat pentru crearea unui obiect simulat în testarea unitară. Acesta extinde alte cadre batjocoritoare, cum ar fi EasyMock și Mockito, pentru a îmbunătăți capacitățile. Cadrul PowerMock folosește un încărcător de clasă personalizat și tehnici de manipulare a codului de octet pentru a permite batjocorirea metodelor statice, claselor finale, metodelor finale, metodelor private, constructorului și eliminarea inițializatoarelor statice. Scopul principal al PowerMock este de a extinde API-urile existente cu unele metode și adnotări pentru a oferi caracteristici suplimentare care fac testarea unitară destul de ușoară.
Cadrul PowerMock oferă o clasă numită PowerMockito folosit pentru a crea obiecte simulate și inițiază verificarea și așteptarea. PowerMockito oferă funcționalitatea pentru a lucra cu API-ul Java reflection.
Să înțelegem conceptul PowerMock cu ajutorul unui exemplu.
Exemplu de PowerMock cu Mockito
Aici, vom crea un exemplu de PowerMock cu cadre Mockito și JUnit. Pentru a crea un exemplu folosind PowerMock, trebuie să parcurgem următorii pași.
cum se convertesc din șir în int
Pasul 1: Adăugați următoarele dependențe PowerMock în fișierul pom.xml.
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
Pasul 2: Aplicați adnotările PowerMock
Pentru a folosi PowerMock cu Mockito, trebuie să aplicăm următoarele Două adnotări în test:
@RunWith(PowerMockRunner.class): Este același lucru pe care l-am folosit în exemplele noastre anterioare. Singura diferență este că în exemplul anterior am folosit MockitoUnitRunner.class, acum vom folosi PowerMockRunner.class pentru a activa API-urile PowerMockito în test.
@PrepareForTest: Îi spune PowerMock să pregătească câteva clase pentru testare. Poate fi aplicat atât la clasele de testare, cât și la metodele de testare individuale. Include clase cu metode finale, statice, private sau native care pot fi batjocorite.
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
Notă: cei doi pași de mai sus sunt obligatorii pentru toate exemplele pe care le vom crea folosind PowerMock.
Există următoarele exemple de PowerMock cu cadre Mockito și JUnit.
1. Batjocură static metode
În exemplul următor, vom bate joc static metode.
Pasul 1: Creați o clasă care conține a static metodă. Am creat o clasă cu numele Utilitate.
Utilitate.java
public class Utility { public static String staticMethod(String call) { return call; } }
Pasul 2: Creați un caz de testare JUnit, numit Powermock_test, în scop de testare.
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); } }
Ieșire
Următoarea ieșire arată că testul rulează cu succes.
De asemenea, putem verifica dacă metoda statică este apelată sau nu, folosind verifyStatic() metoda PowerMockito, așa cum se arată mai jos.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. Batjocură privat metode
În exemplul următor, vom crea o imitație de privat metode.
Pasul 1: Creați o clasă care conține o metodă privată. Am creat clasa cu numele Utilitate și a definit a privat metodă și o metodă publică (care returnează obiectul metodei private).
Utilitate.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
Pasul 2: Creați un caz de testare JUnit numit PowerMock_test în scop de testare.
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())); } }
Ieșire
Următoarea ieșire arată că testul rulează cu succes.
3. Batjocură final metode
În exemplul următor, vom bate joc final metode.
Pasul 1: Creați o clasă care conține a final metodă. Am creat o clasă cu numele Utility și am definit o metodă finală numită finalMethod.
Utilitate.java
public class Utility { public final String finalMethod(String message) { return message; } }
Pasul 2: Creați un caz de testare JUnit numit Powermock_test în scop de testare.
ce este hibernarea
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); } }
Ieșire
Următoarea ieșire arată că testul rulează cu succes.