logo

PowerMock

PowerMock е Java рамка с отворен код, използвана за създаване на макет на обект при тестване на единици. Той разширява други подигравателни рамки като EasyMock и Mockito, за да подобри възможностите. Рамката PowerMock използва персонализирано средство за зареждане на класове и техники за манипулиране на байт код, за да даде възможност за подиграване на статични методи, финални класове, финални методи, частни методи, конструктор и премахване на статични инициализатори. Основната цел на PowerMock е да разшири съществуващите API с някои методи и анотации, за да предостави допълнителни функции, които правят тестването на единици доста лесно.

Рамката PowerMock предоставя клас, наречен PowerMockito използва се за създаване на фалшиви обекти и инициира проверка и очакване. PowerMockito предоставя функционалността за работа с API за отразяване на Java.

Нека разберем концепцията на PowerMock с помощта на пример.

частичен производен символ латекс

Пример за PowerMock с Mockito

Тук ще създадем пример за PowerMock с рамки Mockito и JUnit. За да създадем пример с помощта на PowerMock, трябва да преминем през следните стъпки.

Етап 1: Добавете следните зависимости на PowerMock във файла pom.xml.

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

Стъпка 2: Приложете анотациите на PowerMock

За да използваме PowerMock с Mockito, трябва да приложим следното две анотации в теста:

@RunWith(PowerMockRunner.class): Това е същото, което използвахме в нашите предишни примери. Единствената разлика е, че в предишния пример използвахме MockitoUnitRunner.class, сега ще използваме PowerMockRunner.class за активиране на PowerMockito API в теста.

@PrepareForTest: Той казва на PowerMock да подготви някои класове за тестване. Може да се прилага както за тестовите класове, така и за отделните методи за тестване. Той включва класове с final, static, private или native методи, които могат да бъдат имитирани.

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

Забележка: Горните две стъпки са задължителни за всички примери, които ще създадем с помощта на PowerMock.

Има следните примери за PowerMock с рамки Mockito и JUnit.

1. Подигравка статичен методи

В следващия пример ще се подиграваме статичен методи.

Етап 1: Създайте клас, който съдържа a статичен метод. Създадохме клас с името полезност.

Utility.java

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

Стъпка 2: Създайте JUnit тестов случай с име Powermock_test, с цел тестване.

основни въпроси за интервю за 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 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); } } 

Изход

Следният резултат показва, че тестът се изпълнява успешно.

Пример за PowerMock с Mockito

Можем също да проверим дали статичният метод е извикан или не, като използваме verifyStatic() метод на PowerMockito, както е показано по-долу.

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

2. Подигравка частен методи

В следващия пример ще създадем макет на частен методи.

Етап 1: Създайте клас, който съдържа частен метод. Създадохме клас с името полезност и дефиниран a частен метод и публичен метод (който връща обекта на частния метод).

Utility.java

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

Стъпка 2: Създайте JUnit тестов случай с име PowerMock_test с цел тестване.

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())); } } 

Изход

Следният резултат показва, че тестът се изпълнява успешно.

Пример за PowerMock с Mockito

3. Подигравка финал методи

В следващия пример ще се подиграваме финал методи.

Етап 1: Създайте клас, който съдържа a финал метод. Създадохме клас с името Utility и дефинирахме окончателен метод с име finalMethod.

как да се инжектира макет абстрактен клас

Utility.java

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

Стъпка 2: Създайте JUnit тестов случай с име Powermock_test за тестови цели.

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); } } 

Изход

Следният резултат показва, че тестът се изпълнява успешно.

Пример за PowerMock с Mockito