logo

PowerMock

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

Příklad PowerMock s Mockito

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

Příklad PowerMock s Mockito

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

Příklad PowerMock s Mockito