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.
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.
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.