Android-Tests: Nachrüsten mit Mockito

8

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:

  1. Ich benutze ActivityInstrumentationTestCase2
  2. Ich mache nur einen Test
  3. Wenn ich ein verify(mockedOTBService, atLeastOnce()).getService(); hinzufügen sagt, wurde es nie aufgerufen.
  4. Wenn ich 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%     
CharlesJHardy 07.04.2014, 18:34
quelle

1 Antwort

6

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%     
JFoulkes 08.04.2014, 10:52
quelle