PowerMock
# PowerMock

PowerMock ist ein Java-Framework, zum Erstellen von Mock-Objekten für Unit-Tests. Es läuft als Erweiterung anderer Mocking-Frameworks wie Mockito oder Easymock und erweitert deren Funktionsumfang um die Fähigkeit, bestimmte Sprachaspekte wie statische Methoden oder Konstruktoren zu mocken.

PowerMock verwendet Techniken wie einen eigenen Klassenlader oder Bytecode-Manipulation um in den Mock-Objekten die mit den üblichen Sprachkonstrukten nicht änderbaren Aspekte wie statische oder finale Methoden bzw. Konstruktoren zu manipulieren.

PowerMock wurde ursprünglich von Johan Haleby und Jan Kronquist entwickelt, inzwischen arbeiten mehr als 10 Entwickler an der Software. 2008 erschien mit Version 1.0 der erste Major-Release. PowerMock unterliegt der Lizenz Apache 2.0. Powermock wird von bekannten Frameworks und Werkzeugen wie Spring, Neo4j, Checkstyle, JBoss AS oder Hudson zum Testen verwendet.

## Beispiel

Das folgende Beispiel demonstriert einen Teil der Möglichkeiten, die PowerMock bietet. Gegeben sei folgendes Szenario:

Die zu testende Unit sei die Klasse Calculator, die die Berechnung zweier Integer-Werte an die Klasse MathUtil delegiert, die nur statische Methoden anbietet:

Das Verhalten von MathUtil soll nun gemockt werden, weil im Testszenario die Addition andere Ergebnisse als sonst liefern soll. Der folgende Test ermöglicht dies:

Zunächst wird ein spezieller Test-Runner verwendet, der vom PowerMock-Framework zur Verfügung gestellt wird. Mit der Annotation @PrepareForTest( MathUtil.class ) wird die zu mockende Klasse vorbereitet. Diese Annotation kann auch eine ganze Liste von zu mockenden Klassen verarbeiten. In unserem Beispiel besteht die Liste aus einem Element MathUtil.class.

In der setup-Methode wird PowerMockito.mockStatic(...) aufgerufen.

Nun wird das Mock-Verhalten der statischen Methode definiert, indem PowerMockito.when(...) aufgerufen wird. Danach kommen in den eigentlichen Tests die typischen Assertions.

