- PowerMock
-
Dieser Artikel wurde aufgrund von inhaltlichen Mängeln auf der Qualitätssicherungsseite der Redaktion Informatik eingetragen. Dies geschieht, um die Qualität der Artikel aus dem Themengebiet Informatik auf ein akzeptables Niveau zu bringen. Hilf mit, die inhaltlichen Mängel dieses Artikels zu beseitigen und beteilige dich an der Diskussion! (+)
PowerMock Maintainer Johan Haleby, Jan Kronquist Aktuelle Version 1.4.10
(23. August 2011)Betriebssystem Plattformübergreifend Programmiersprache Java Kategorie Test-Framework Lizenz Apache Lizenz 2.0 powermock.org PowerMock ist ein Java-Framework zum Unit-Testen eines Codes, der in der Regel als untestbar gilt[1]. Es läuft als Erweiterungen anderer Mocking Frameworks wie Mockito oder EasyMock. Anderen Test-Frameworks, die Mocking unterstützen, fehlt oft die Fähigkeit bestimmte Sprachaspekte wie statische Methoden oder Konstruktoren zu mocken. PowerMock ergänzt diese Frameworks mittels eines eigenen Classloaders bzw. Bytecode Manipulation um genau diese Fähigkeiten.
Beispiel[2]
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 KlasseMathUtil
delegiert, die nur statische Methoden anbietet:public class Calculator { public int add(int a, int b) { return MathUtil.addInteger(a, b); } } public abstract class MathUtil { public static final int addInteger(int a, int b) { return a + b; } private MathUtil() {} }
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:@RunWith(PowerMockRunner.class) @PrepareForTest( MathUtil.class ) public class CalculatorTest { /** Unit under test. */ private Calculator calc; @Before public void setUp() { calc = new Calculator(); PowerMockito.mockStatic(MathUtil.class); PowerMockito.when(MathUtil.addInteger(1, 1)).thenReturn(0); PowerMockito.when(MathUtil.addInteger(2, 2)).thenReturn(1); } @Test public void shouldCalculateInAStrangeWay() { assertEquals(0, calc.add(1, 1) ); assertEquals(1, calc.add(2, 2) ); } }
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 mockenden Klasse vorbereitet. Diese Annotation kann auch eine ganze List von zu mockenden Klassen verarbeiten. In unserem Beispiel besteht die Liste aus einem ElementMathUtil.class
.In der setup-Methode wird
PowerMockito.mockStatic(...)
aufgerufen. (Man hätte für die Verwendung der MethodemockStatic
einen statischen Import schreiben können, ohne wird aber besser sichtbar, woher die Methode stammt.)Nun wird das Mock-Verhalten der statischen Methode definiert, indem
PowerMockito.when(...)
aufrufen wird. Danach kommen in den eigentlichen Tests die typischen Assertions.Siehe auch
Einzelnachweise
Kategorien:- Java-Programmierwerkzeug
- Java-Bibliothek
- Freies Programmierwerkzeug
- Testsoftware
- Testen (Software)
Wikimedia Foundation.