logo

PowerMock

PowerMock to framework Java typu open source używany do tworzenia próbnych obiektów w testach jednostkowych. Rozszerza inne platformy drwiące, takie jak EasyMock i Mockito, aby zwiększyć możliwości. Struktura PowerMock wykorzystuje niestandardowe techniki ładowania klas i manipulacji kodem bajtowym, aby umożliwić kpiny z metod statycznych, klas końcowych, metod końcowych, metod prywatnych, konstruktora i usuwanie inicjatorów statycznych. Głównym celem PowerMock jest rozszerzenie istniejących interfejsów API o niektóre metody i adnotacje, aby zapewnić dodatkowe funkcje, które ułatwiają testowanie jednostkowe.

Struktura PowerMock udostępnia klasę o nazwie PowerMockito służy do tworzenia fałszywych obiektów i inicjuje weryfikację i oczekiwanie. PowerMockito zapewnia funkcjonalność do pracy z interfejsem API refleksji Java.

Przyjrzyjmy się koncepcji PowerMock na przykładzie.

Przykład PowerMock z Mockito

Tutaj stworzymy przykład PowerMock z frameworkami Mockito i JUnit. Aby utworzyć przykład za pomocą PowerMock, musimy przejść przez następujące kroki.

Krok 1: Dodaj następujące zależności PowerMock w pliku pom.xml.

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

Krok 2: Zastosuj adnotacje PowerMock

Aby używać PowerMock z Mockito, musimy zastosować się do poniższych wskazówek dwa adnotacje w teście:

@RunWith(PowerMockRunner.class): Jest taki sam, jak użyliśmy w naszych poprzednich przykładach. Jedyna różnica polega na tym, że w poprzednim przykładzie użyliśmy MockitoUnitRunner.class, teraz do włączenia API PowerMockito w teście użyjemy PowerMockRunner.class.

@PrepareForTest: Mówi PowerMockowi, aby przygotował niektóre klasy do testów. Można go zastosować zarówno do klas testowych, jak i do poszczególnych metod badawczych. Zawiera klasy z metodami końcowymi, statycznymi, prywatnymi lub natywnymi, które można wyśmiewać.

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

Uwaga: Powyższe dwa kroki są obowiązkowe w przypadku wszystkich przykładów, które utworzymy za pomocą PowerMock.

Poniżej znajdują się przykłady PowerMock z frameworkami Mockito i JUnit.

1. Kpiny statyczny metody

W poniższym przykładzie będziemy kpić statyczny metody.

1nf 2nf 3nf

Krok 1: Utwórz klasę zawierającą a statyczny metoda. Stworzyliśmy klasę o nazwie Pożytek.

Narzędzie.java

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

Krok 2: Utwórz przypadek testowy JUnit o nazwie Powermock_test, w celach testowych.

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

Wyjście

Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony.

Przykład PowerMock z Mockito

Możemy również sprawdzić, czy metoda statyczna została wywołana, czy nie, używając metody zweryfikujStatyczny() metodą PowerMockito, jak pokazano poniżej.

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

2. Kpiny prywatny metody

W poniższym przykładzie utworzymy próbkę prywatny metody.

Krok 1: Utwórz klasę zawierającą metodę prywatną. Stworzyliśmy klasę o nazwie Pożytek i zdefiniowano a prywatny metodę i metodę publiczną (która zwraca obiekt metody prywatnej).

zablokowane numery

Narzędzie.java

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

Krok 2: Utwórz przypadek testowy JUnit o nazwie PowerMock_test w celach testowych.

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

Wyjście

Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony.

Przykład PowerMock z Mockito

3. Kpiny finał metody

W poniższym przykładzie będziemy kpić finał metody.

Krok 1: Utwórz klasę zawierającą a finał metoda. Stworzyliśmy klasę o nazwie Utility i zdefiniowaliśmy ostateczną metodę o nazwie metoda ostateczna.

Narzędzie.java

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

Krok 2: Utwórz przypadek testowy JUnit o nazwie Powermock_test do celów testowych.

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

Wyjście

Poniższe dane wyjściowe pokazują, że test został pomyślnie uruchomiony.

Przykład PowerMock z Mockito