PowerMock

PowerMock
QS-Informatik

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
PowerMock Logo
Maintainer Johan Haleby, Jan Kronquist
Aktuelle Version 1.4.10
(23. August 2011)
Betriebssystem Plattformübergreifend
Programmier­sprache 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:

Testszenario

Die zu testende Unit sei die Klasse Calculator, die die Berechnung zweier Integer-Werte an die Klasse MathUtil 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 Element MathUtil.class.

In der setup-Methode wird PowerMockito.mockStatic(...) aufgerufen. (Man hätte für die Verwendung der Methode mockStatic 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

  1. PowerMock Homepage (engl.)
  2. Blog: Testen und Mocken statischer Methoden in Java

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Easymock — Maintainer Tammo Freese, Henri Tremblay Entwickler OFFIS, Tammo Freese, Henri Tremblay Aktuelle Version 3.0 …   Deutsch Wikipedia

  • JUnit — Entwickler u.a. Kent Beck und Erich Gamma Aktuelle Version 4.10 (5. Oktober 2011) Betriebssystem Plattformübergreifend Programmier­sprache …   Deutsch Wikipedia

  • Разработка через тестирование — Разработка программного обеспечения Процесс разработки ПО Шаги процесса Анализ • Проектирование • Программирование • Докумен …   Википедия

  • Mockito — Maintainer Szczepan Faber Aktuelle Version 1.9.0 (23. Juli 2011) Betriebssystem Plattformübergreifend …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”