logo

PowerMock

PowerMock — це фреймворк Java з відкритим вихідним кодом, який використовується для створення макетного об’єкта в модульному тестуванні. Він розширює інші фреймворки мокінгу, такі як EasyMock і Mockito, щоб розширити можливості. Фреймворк PowerMock використовує спеціальний завантажувач класів і методи маніпулювання байт-кодом, щоб увімкнути імітацію статичних методів, кінцевих класів, кінцевих методів, приватних методів, конструктора та видалення статичних ініціалізаторів. Основна мета PowerMock — розширити існуючі API за допомогою деяких методів і анотацій, щоб надати додаткові функції, які спрощують модульне тестування.

Структура PowerMock надає клас під назвою PowerMockito використовується для створення макетів об’єктів і ініціює перевірку та очікування. PowerMockito надає функціональність для роботи з API відображення Java.

Давайте розберемося з концепцією PowerMock на прикладі.

java читає csv

Приклад 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, з метою тестування.

покриття заяви

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