Ich versuche einen LoginPresenter
zu testen, und ich benutze Mockito für die Mocks. Mockito lässt mich nicht verify
ein Methodenaufruf auf dem SUT, also muss ich seine Abhängigkeiten spotten und verify
ihre Methoden wurden von der LoginPresenter
aufgerufen.Wie man dem zu testenden Subjekt sagt, den Schein anstelle seiner eigenen Variablen zu verwenden
habe ich auf die folgende Situation:
private void attemptLogin(String username, String password) {
new LoginNetworkOperation(username, password).execute();
}
Ich habe auf execute()
zu verspotten LoginNetworkOperation
und mit Mockito, verify
der Methodenaufruf:
LoginPresenter ein Verfahren attemptLogin
genannt hat.
@Test
public void testWhenUserNameAndPasswordAreEnteredShouldAttemptLogin() throws Exception {
LoginView loginView = Mockito.mock(LoginView.class);
LoginNetworkOperation loginNetworkOperation = Mockito.mock(LoginNetworkOperation.class);
Mockito.when(loginView.getUserName()).thenReturn("George");
Mockito.when(loginView.getPassword()).thenReturn("aaaaaa");
loginPresenter.setLoginView(loginView);
loginPresenter.onLoginClicked();
Mockito.verify(loginNetworkOperation.execute());
}
aber wie kann ich LoginPresenter
die verspottete LoginNetworkOperation verwenden machen anstatt das man es in der attemptLogin
Methode erstellt? Ich muss den Entwurf von LoginPresenter ändern, um eine Mitgliedsvariable zu verwenden, und einen Setter für ihn bereitstellen, der suboptimal ist, da eine lokale Variable in der Methode reichlich ist, da sie nur dort verwendet wird.
Gehe ich die ganze Sache falsch?
Ursprünglich wollte ich überprüfen, ob LoginPresenter
‚s attemptLogin
genannt wird, aber Mockito kann nur verspott Objekte überprüfen‘ Methoden und ich kann nicht auf LoginPresenter
auszuspionieren, weil es endgültig ist (erzeugt durch AndroidAnnotations
)
Sie können sich diese Antwort: http://stackoverflow.com/questions/10585490/androidannotations-and-unit-testing#10621419 –