In meinem MainActivity
habe ich eine Methode namens getAPI
, die ein OTBServiceWrapper
zurückgibt. Dies wird verwendet, um das Nachrüsten für den Aufruf einer API einzurichten.
In meiner Datei MainActivityTest
versuche ich, den new OTBService().getService()
-Aufruf auszugeben, den die getApi
-Methode macht, also kann ich einen MockedOTBService
zurückgeben, der den Client in einen benutzerdefinierten umwandelt, der json
zurückgibt.
Wie es ist, die aktuelle Implementierung wird es die MockedOTBService
, wenn ich einen Logger innerhalb MockedOTBService
platzieren musste, aber auch durchfällt und die echte API aufruft, die ich in einem Test nicht will.
Ich versuche, die Retrofit-API-Aufrufe mit Mockito zu stubben und json
zurückzugeben. Ich kann nicht verstehen, warum der Stub noch genannt wird, stößt die fragliche Methode nicht an.
Hinweise:
ActivityInstrumentationTestCase2
verify(mockedOTBService, atLeastOnce()).getService();
hinzufügen sagt, wurde es nie aufgerufen. when...thenReturn
so ändere, dass ein mMainActivity = spy(getActivity())
verwendet wird, gibt es keine Änderung und die echte API wird aufgerufen. Logcat-Ausgabe
%Vor%Echter Fluss
MainActivity.onCreate () & gt; OTBService.getService () & gt; OTBServiceWrapper.createSearch (...)
Versuch, innerhalb von Tests zu erreichen
MainActivity.onCreate () & gt; MockedOTBService.getService () & gt; OTBServiceWrapper.createSearch (...)
MainActivity.java
%Vor%OTBService.java
%Vor%OTBServiceWrapper.java
%Vor%MainActivityTest.java
%Vor%MockedOTBService.java
%Vor%LocalJsonClient.java
%Vor%build.gradle
%Vor%Entfernen Sie die Notwendigkeit, Ihre Anfrage zu verspotten, indem Sie der Aktivität erlauben, den Dienst einzurichten.
Erstelle in deiner MainActivity
eine Klassenvariable und einen Klassensetzer für den Dienst. Es muss ein Klassenbereich sein, um zu verhindern, dass die Methode OnCreate
aufgerufen wird, bevor Sie den Dienst auf den gewünschten Wert gesetzt haben. Erstellen Sie außerdem einen Instanz-Getter, der den Dienst festlegt, falls Sie dies noch nicht getan haben.
Setzen Sie den Dienst in Ihrem Test vor dem Aufruf von getActivity()
als Ihren Mock-Service ein. (Vielleicht darüber nachdenken, dies auf ein Support-Objekt zu verschieben).
MainActivity.java
%Vor%MainActivityTest.java
%Vor%Tags und Links java android android-studio retrofit mockito