PowerMock #
PowerMock bietet eine Reihe von Möglichkeiten an, die Mockito nicht anbietet (testen von private- und final-Methoden sowie von constructors).
Benötigte Abhängigkeiten zur Verwendung mit Mockito und JUnit:
org.powermock:powermock-module-junit4org.powermock:powermock-api-mockito
Statische Methoden #
Hinweis: Es wird normalerweise nicht empfohlen, statische Methoden zu testen
- Spezifischer Runner:
@RunWith(PowerMockRunner.class) - Zu mockende Klasse initialisieren. Bspw.:
PowerMockito.mockStatic(UtilityClass.class);sowie auf Klassenebene:@PrepareForTest(UtilityClass.class) mockausführen
Um das Ausführen einer Methode zu verifizieren: PowerMockito.verifyStatic(); // verify the next call to a static method UtilityClass.staticMethod(6);
Private Methoden #
Hinweis: Es wird normalerweise nicht empfohlen, private Methoden zu testen
Um private Methoden zu testen, muss die Utility-Klasse Whitebox mit der Methode invokeMethod verwendet werden: Whitebox.invokeMethod(<zu_mockende_klasse>, <beschreibung>); Die zu mockende Klasse wird mit @InjectMock injiziert (s. Mockito).
Constructors #
Hinweis: Es wird normalerweise nicht empfohlen, Konstruktoren zu testen
- PrepareForTest-Annotation: Klasse, welche den Konstruktor einer anderen Klasse anwendet. Bspw. wenn der Konstruktor von
ArrayListin KlasseSystemUnderTestgemockt werden soll:@PrepareForTest(SystemUnderTest.class) - Konstruktor überschreiben. Bspw.:
PowerMockito.whenNew(ArrayList.class).withAnyArguments().thenReturn(mockList);(wobeimockListvom TypArrayListist)