logo

PowerMock

PowerMock ist ein Open-Source-Java-Framework, das zum Erstellen eines Scheinobjekts in Unit-Tests verwendet wird. Es erweitert andere Mocking-Frameworks wie EasyMock und Mockito, um die Funktionen zu erweitern. Das PowerMock-Framework verwendet einen benutzerdefinierten Klassenlader und Bytecode-Manipulationstechniken, um das Verspotten statischer Methoden, endgültiger Klassen, endgültiger Methoden, privater Methoden, Konstruktoren und das Entfernen statischer Initialisierer zu ermöglichen. Das Hauptziel von PowerMock besteht darin, die vorhandenen APIs um einige Methoden und Annotationen zu erweitern, um zusätzliche Funktionen bereitzustellen, die Unit-Tests recht einfach machen.

Das PowerMock-Framework stellt eine Klasse namens bereit PowerMockito Wird zum Erstellen von Scheinobjekten verwendet und initiiert Überprüfung und Erwartung. Der PowerMockito bietet die Funktionalität für die Arbeit mit der Java Reflection API.

hochgestellt im Illustrator

Lassen Sie uns das Konzept von PowerMock anhand eines Beispiels verstehen.

Beispiel für PowerMock mit Mockito

Hier erstellen wir ein Beispiel für PowerMock mit Mockito- und JUnit-Frameworks. Um ein Beispiel mit PowerMock zu erstellen, müssen wir die folgenden Schritte ausführen.

Schritt 1: Fügen Sie die folgenden PowerMock-Abhängigkeiten in der Datei pom.xml hinzu.

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

Schritt 2: Wenden Sie die PowerMock-Anmerkungen an

Um PowerMock mit Mockito zu verwenden, müssen wir Folgendes anwenden zwei Anmerkungen im Test:

@RunWith(PowerMockRunner.class): Es ist dasselbe, das wir in unseren vorherigen Beispielen verwendet haben. Der einzige Unterschied besteht darin, dass wir im vorherigen Beispiel MockitoUnitRunner.class verwendet haben. Jetzt verwenden wir PowerMockRunner.class, um die PowerMockito-APIs im Test zu aktivieren.

@PrepareForTest: Es weist PowerMock an, einige Klassen zum Testen vorzubereiten. Es kann sowohl auf die Testklassen als auch auf die einzelnen Testmethoden angewendet werden. Es umfasst Klassen mit finalen, statischen, privaten oder nativen Methoden, die verspottet werden können.

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

Hinweis: Die beiden oben genannten Schritte sind für alle Beispiele, die wir mit PowerMock erstellen werden, obligatorisch.

Es gibt folgende Beispiele für PowerMock mit Mockito- und JUnit-Frameworks.

1. Spott statisch Methoden

Im folgenden Beispiel werden wir verspotten statisch Methoden.

Array in Java-Methoden

Schritt 1: Erstellen Sie eine Klasse, die a enthält statisch Methode. Wir haben eine Klasse mit dem Namen erstellt Dienstprogramm.

Utility.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen Powermock_test, zu Testzwecken.

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

Ausgabe

Die folgende Ausgabe zeigt, dass der Test erfolgreich ausgeführt wird.

Beispiel für PowerMock mit Mockito

Wir können auch überprüfen, ob die statische Methode aufgerufen wird oder nicht, indem wir Folgendes verwenden: überprüfenStatic() Methode von PowerMockito, wie unten gezeigt.

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

2. Spott Privat Methoden

Im folgenden Beispiel erstellen wir ein Mock of Privat Methoden.

1nf 2nf 3nf

Schritt 1: Erstellen Sie eine Klasse, die eine private Methode enthält. Wir haben eine Klasse mit dem Namen erstellt Dienstprogramm und definierte a Privat Methode und eine öffentliche Methode (die das Objekt der privaten Methode zurückgibt).

Utility.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen PowerMock_test zu Testzwecken.

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

Ausgabe

Die folgende Ausgabe zeigt, dass der Test erfolgreich ausgeführt wird.

Beispiel für PowerMock mit Mockito

3. Spott Finale Methoden

Im folgenden Beispiel werden wir verspotten Finale Methoden.

Schritt 1: Erstellen Sie eine Klasse, die a enthält Finale Methode. Wir haben eine Klasse mit dem Namen Utility erstellt und eine endgültige Methode mit dem Namen definiert finalMethode.

Utility.java

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

Schritt 2: Erstellen Sie einen JUnit-Testfall mit dem Namen Powermock_test zu Testzwecken.

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

Ausgabe

Die folgende Ausgabe zeigt, dass der Test erfolgreich ausgeführt wird.

hasnext Java
Beispiel für PowerMock mit Mockito