Die unten angegebene Methode im Codeabschnitt enthält eine statische Methode, die "with ()" ist. Ich möchte den Code unten testen, also habe ich den Test dieser Methode codiert wie im Testabschnitt gezeigt.
Ich habe versucht, die Methode mit "spy ()" und "mock ()" zu testen, aber der Test schlägt immer fehl.
Bitte lassen Sie mich wissen, wie kann ich eine Methode testen, gibt void zurück?
Code
%Vor%testen :
%Vor% Normalerweise, wenn Sie PowerMock
verwenden, ist das ein gutes Zeichen, dass Sie höchstwahrscheinlich auf dem falschen Weg sind.
Was ist, wenn Sie anstatt direkt auf Picasso
zu verweisen, eine Komponente erstellen, deren Aufgabe es sein wird, ein Bild zu laden, sagen wir Klasse ImageLoader
. Was wird dir das geben?
Trennung von Bedenken: Wenn Sie sich morgen entscheiden, zu Glide
zu wechseln, sollten Sie nicht jede einzelne Klasse ändern, in der Sie Picasso
verwendet haben. Sie werden nur die Implementierung von ImageLoader
ändern. Andere Komponenten kennen diese Änderungen nicht, weil sie von einer Abstraktion abhängen, nicht für die Implementierung
Naht: Dies ermöglicht Ihnen, Abhängigkeiten leicht nachzuahmen, um Komponententests durchzuführen
Dies wird unsere Abstraktion sein:
%Vor%Lassen Sie uns eine Implementierung bereitstellen:
%Vor% Nun, in Ihren Komponenten, wenn Sie Picasso
benötigen, verwenden Sie stattdessen ImageLoader
.
Damit folgt Ihre Methode:
%Vor%Dann wird Ihr Test wie folgt aussehen:
%Vor% Keine Verspottung von static
Methode, keine PowerMock
benötigt.
Von der Mockito-FAQ :
Was sind die Einschränkungen von Mockito?
...
Kann statische Methoden nicht vortäuschen
Verwenden Sie stattdessen PowerMock . Hier findest du eine detaillierte Anleitung, wie man die statischen Methoden verspottet.
>Aktualisieren
Um den PowerMock auf Ihren Test anzuwenden, müssen Sie:
Fügen Sie @PrepareForTest
auf Testklassenebene hinzu:
@PrepareForTest(Picasso.class)
public class ValidationTest {
...
}
Rufen Sie PowerMockito.mockStatic()
auf, um eine statische Klasse zu erstellen
PowerMockito.mockStatic(Picasso.class);
Verwenden Sie einfach Mockito.when()
, um Ihre Erwartungen zu erfüllen:
Mockito.when(Picasso.with(mCtx)).thenReturn(requestCreator);
Für RequestCreator.class
gelten die gleichen Schritte.
P.S. Ich kann Fehler machen, weil ich die API der 3rd-Party-Bibliothek, die Sie verwenden, nicht kenne.
Tags und Links android unit-testing junit mockito powermockito