PowerMock je open-source Java framework, který se používá k vytvoření falešného objektu při testování jednotek. Rozšiřuje další simulační rámce, jako je EasyMock a Mockito, aby vylepšil možnosti. Rámec PowerMock používá vlastní zavaděč tříd a techniky manipulace s bajtovým kódem, které umožňují zesměšňovat statické metody, finální třídy, konečné metody, soukromé metody, konstruktor a odstranění statických inicializátorů. Hlavním cílem PowerMock je rozšířit stávající API o některé metody a anotace, aby poskytly další funkce, které usnadňují testování jednotek.
Rámec PowerMock poskytuje třídu s názvem PowerMockito používá se k vytváření falešných objektů a iniciuje ověřování a očekávání. PowerMockito poskytuje funkce pro práci s rozhraním Java reflection API.
jak zavřít vývojářský režim
Pojďme pochopit koncept PowerMock pomocí příkladu.
Příklad PowerMock s Mockito
Zde vytvoříme příklad PowerMock s frameworky Mockito a JUnit. Chcete-li vytvořit příklad pomocí PowerMock, musíme projít následujícími kroky.
Krok 1: Přidejte následující závislosti PowerMock do souboru pom.xml.
org.powermock powermock-api-mockito 1.7.0 test org.powermock powermock-module-junit4 1.7.0 test
Krok 2: Použijte poznámky PowerMock
Chcete-li použít PowerMock s Mockito, musíme použít následující dva anotace v testu:
@RunWith(PowerMockRunner.class): Je to stejné, jako jsme použili v našich předchozích příkladech. Jediný rozdíl je v tom, že v předchozím příkladu jsme použili MockitoUnitRunner.class, nyní použijeme PowerMockRunner.class pro povolení PowerMockito API v testu.
@PrepareForTest: Říká PowerMock, aby připravil některé třídy k testování. Lze jej aplikovat jak na zkušební třídy, tak na jednotlivé zkušební metody. Zahrnuje třídy s konečnými, statickými, soukromými nebo nativními metodami, které lze zesměšňovat.
zmije plná
@RunWith(PowerMockRunner.class) @PrepareForTest(Utility.class) public class Powermock_test { }
Poznámka: Výše uvedené dva kroky jsou povinné pro všechny příklady, které se chystáme vytvořit pomocí PowerMock.
Níže jsou uvedeny příklady PowerMock s frameworky Mockito a JUnit.
1. Zesměšňování statický metody
V následujícím příkladu se budeme vysmívat statický metody.
Krok 1: Vytvořte třídu, která obsahuje a statický metoda. Vytvořili jsme třídu s názvem Utility.
Utility.java
rakhi sawant
public class Utility { public static String staticMethod(String call) { return call; } }
Krok 2: Vytvořte testovací případ JUnit s názvem Powermock_test, za účelem testování.
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); } }
Výstup
Následující výstup ukazuje, že test probíhá úspěšně.
Můžeme také ověřit, zda je statická metoda volána nebo ne, pomocí ověřitStatic() metoda PowerMockito, jak je uvedeno níže.
PowerMockito.verifyStatic(); Utility.staticMethod(call);
2. Zesměšňování soukromé metody
V následujícím příkladu vytvoříme maketu soukromé metody.
Krok 1: Vytvořte třídu, která obsahuje soukromou metodu. Vytvořili jsme třídu s názvem Utility a definováno a soukromé metoda a veřejná metoda (která vrací objekt soukromé metody).
Utility.java
public class Utility { private String privateMethod(String message) { return message; } public String callPrivateMethod(String message) { return privateMethod(message); } }
Krok 2: Vytvořte testovací případ JUnit s názvem PowerMock_test za účelem testování.
kruskalův algoritmus
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())); } }
Výstup
Následující výstup ukazuje, že test probíhá úspěšně.
3. Zesměšňování finále metody
V následujícím příkladu se budeme vysmívat finále metody.
Krok 1: Vytvořte třídu, která obsahuje a finále metoda. Vytvořili jsme třídu s názvem Utility a definovali konečnou metodu pojmenovanou konečná metoda.
Utility.java
public class Utility { public final String finalMethod(String message) { return message; } }
Krok 2: Vytvořte testovací případ JUnit s názvem Powermock_test pro testovací účely.
Powermock_test.java
řetězec v char 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); } }
Výstup
Následující výstup ukazuje, že test probíhá úspěšně.