PowerMock
| {{#if: PowerMock | PowerMock | {{#invoke:WLink|getArticleBase}} }}
{{#if: PowerMock Logo | | ||||||||
|---|---|---|---|---|---|---|---|---|
colspan="2" class="notheme" style="text-align:center; background:#Vorlage:Standardfarbe; color:#202122;" | PowerMock Logo |
{{#if: {{#invoke:Wikidata|claim|P154}} |
| ||||||||
[[Datei:{{#invoke:Wikidata|claim|P154}}|150px]]
}} }}{{#if: | | ||||||||
| {{#if: | }}| }} | ||||||||
| Basisdaten
{{#if: Johan Haleby, Jan Kronquist | | ||||||||
| Hauptentwickler |
{{#if: {{#invoke:Wikidata|claim|P126}} |
| |||||||
| Maintainer | claim|P126|parameter=link|references=ja|list=, }}
}} }}{{#if: | | |||||||
| Entwickler |
{{#if: {{#invoke:Wikidata|claim|P178}} |
| |||||||
| Entwickler | claim|P178|parameter=link|references=ja|list=, }}
}} }}{{#if: | | |||||||
| Erscheinungsjahr |
{{#if: {{#invoke:Wikidata|claim|P577}} |
| |||||||
| Erscheinungsjahr | claim|P577|references=ja|list=, }} |
{{#if: {{#invoke:Wikidata|claim|P571}} |
| |||||||
| Erscheinungsjahr | claim|P571|references=ja|list=, }}
}} }} }}{{#ifeq: | KEINE_ANGABE || {{#if: | | |||||||
| Aktuelle Version | ({{#if: | Vorlage:Datum – die Form mit drei unbenannten Parametern oder anderen einzelnen Zeiteinheiten ist veraltet und wird nicht mehr unterstützt. Bitte gib das Datum einfach im Klartext an. |
format | | {{#timefl:now|date}}}} | {{{2}}} | T._Monat JJJJ}} | lang= {{#switch: | -|=de | #default=de-AT
}} }} }}) }} |
{{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813}} |
|
| Aktuelle Version | claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|references=ja}} {{#if: {{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|qualifier=P577}} | ({{#invoke:Wikidata|claim|P348|P548|!Q3295609,Q51930650,Q2122918,Q21727724,Q1072356,Q6736813|qualifier=P577}}) }}}}}} }}{{#ifeq: | KEINE_ANGABE || {{#if: | | |||||||
| Aktuelle Vorabversion | ({{#if: | Vorlage:Datum – die Form mit drei unbenannten Parametern oder anderen einzelnen Zeiteinheiten ist veraltet und wird nicht mehr unterstützt. Bitte gib das Datum einfach im Klartext an. |
format | | {{#timefl:now|date}}}} | {{{2}}} | T._Monat JJJJ}} | lang= {{#switch: | -|=de | #default=de-AT
}} }} }}) }} |
{{#if: {{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724}} |
|
| Aktuelle Vorabversion | claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|references=ja}} {{#if: {{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|qualifier=P577}} | ({{#invoke:Wikidata|claim|P348|P548|Q1072356,Q51930650,Q3295609,Q2122918,Q21727724|qualifier=P577}}) }}}}}} }}{{#if: | | |||||||
| Ausführungsumgebung |
{{#if: Plattformübergreifend |
| |||||||
| Betriebssystem | Plattformübergreifend |
{{#if: {{#invoke:Wikidata|claim|P306}} |
| |||||||
| Betriebssystem | claim|P306|parameter=link|references=ja|list=, }}
}} }} }}{{#if: | | |||||||
| Programmiersprache |
{{#if: {{#invoke:Wikidata|claim|P277}} |
| |||||||
| Programmiersprache | claim|P277|parameter=link|references=ja|list=, }}
}} | |||||||
| Kategorie | Test-Framework
}}{{#if: | | |||||||
| Lizenz |
{{#if: {{#invoke:Wikidata|claim|P275}} |
| |||||||
| Lizenz | claim|P275|parameter=link|references=ja|list=, }}
}} }}{{#if: | | |||||||
| deutschsprachig | faculty|}} | ja | nein }}
}}{{#if: | | |||||||
| Sonstiges | {{{Sonstiges}}}
}}{{#if: | | |||||||
|
{{#if: {{#invoke:Wikidata|claim|P856|notdeprecated=1}} |
| ||||||||
{{#invoke: WLink | formatURL | {{#invoke:Wikidata|claim|P856|parameter=link|notdeprecated=1}}}}
}} }}{{#if: | | ||||||||
| Dateien | [[c:Category:Created with {{{Dateien}}}|{{{Dateien}}}]]
}} | |||||||
PowerMock ist ein Java-Framework, zum Erstellen von Mock-Objekten für Unit-Tests.<ref name="Homepage"/> 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.<ref>Powermock Fakten auf OpenHub</ref> 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.<ref>Powermock-JUnit4 Verwender</ref>
Beispiel
Das folgende Beispiel<ref name="Beispiel">Blog: Testen und Mocken statischer Methoden in Java</ref> 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:
<syntaxhighlight lang="java">
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() {}
} </syntaxhighlight>
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:
<syntaxhighlight lang="java"> @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) );
}
} </syntaxhighlight>
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.
Siehe auch
Literatur
- {{#invoke:Vorlage:Literatur|f}}
Weblinks
Einzelnachweise
<references> <ref name="Homepage">PowerMock Homepage (englisch)</ref> </references>