Ich habe eine Klasse im Test, die eine Methode enthält, die eine innere anonyme Klasse hat. Eine der Methoden in der anonymen Klasse ruft eine Methode aus der getesteten Klasse auf, aber Mockito scheint dies nicht zu erkennen.Mockito: Überprüfen Methodenaufruf von internen anonymen Klasse
public class ClassUnderTest {
Dependency dependency;
public ClassUnderTest(Dependency d) {
dependency = d;
}
public void method() {
dependency.returnsObservable().observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribe(new Observer<SupportClass> {
/* Other methods omitted */
public void onComplete() {
outerMethod();
})
}
public void outerMethod() {
blah;
}
}
Mein Testcode:
public class TestClass {
ClassUnderTest underTest;
Dependency dependency;
@Before
public void setUp() throws Exception {
dependency = Mockito.mock(Dependency.class);
underTest = Mockito.spy(new ClassUnderTest(dependency));
}
@Test
public void method() throws
Mockito.when(dependency.returnObservable()).thenReturn(Observable.just(new SupportClass());
Mockito.doNothing().when(underTest).outerMethod();
underTest.method();
Mockito.verify(underTest).outerMethod();
}
}
Aus irgendeinem Grund, dass ich nicht scheinen, um herauszufinden können, erkennen Mockito nicht, dass outerMethod() aufgerufen wird, auch wenn ich manuell überprüft haben, indem Sie Zeile für Zeile im Debugger durchlaufen. Ich habe auch überprüft, dass der Aufruf des Abhängigkeitsobjekts das richtige Observable mit dem richtigen Inhalt zurückgibt, und die Methoden onComplete() und outerMethod() werden aufgerufen. Ich bin nur verwirrt, warum Mockito es nicht als solches erkennt.
Dies ist der Fehler, dass es ausspuckt:
Wanted but not invoked:
classUnderTest.outerMethod();
-> at (file and line number)
However, there was exactly 1 interaction with this mock:
classUnderTest.method();
-> at (file and line number)
Gibt es etwas offensichtlich fehle ich?
Zeigen Sie die 'Dependency' Klasse. Ich sehe nicht, wo 'innerMethod' aufgerufen wird. Am besten wäre es, einen [MCVE] (https://stackoverflow.com/help/mcve) zu posten –
Ich habe den Beispielcode aktualisiert, um hoffentlich einige Dinge zu klären. Die returnObservable() -Methode in der Abhängigkeitsklasse funktioniert korrekt/gibt ein gültiges Observable-Objekt zurück, und die Methoden onComplete() und outerMethod() werden aufgerufen. Ich bin einfach verwirrt, warum Mockito sie nicht erkennt. @VinceEmigh – theasianpianist
Ihr Code ist nicht ausreichend. In Ihrer Testabhängigkeit ist ein Mock, aber Sie rufen 'dependency.returnsObservable(). Subscribe (...)'. Das würde NPE in Ihrem Test verursachen, da dependency.returnsObservable() null zurückgibt. Machen Sie Ihr Beispiel zur Arbeit. – tkruse