Ich schreibe Mockito-Tests für App basierend auf MVP-Muster. Im Folgenden ist der Code für Anmeldung AktivitätUnit Test - wie man Listener verspotten
public class LoginActivity extends AppCompatActivity implements LoginContract.ILoginView{
presenter = new LoginPresenter(this);
@Override
public void startMoviesActivity() {
startActivity(new Intent(this, MoviesActivity.class));
}
}
public class LoginContract {
public interface ILoginView {
...
void startMoviesActivity();
}
public interface ILoginService {
interface OnLoginFinishedListener {
void onLoginSuccess();
void onLoginFailure();
}
void login(String username, String password, OnLoginFinishedListener
listener);
}
}
public class LoginPresenter implements LoginContract.ILoginService.OnLoginFinishedListener {
private LoginContract.ILoginView view;
private LoginContract.ILoginService service;
public LoginPresenter(LoginContract.ILoginView view) {
this.view = view;
service = new LoginService();
}
public void validateCredentials(String email, String password) {
if(email.isEmpty()){
view.setEmailEmptyError(R.string.error_email_empty);
return;
}
if(password.isEmpty()){
view.setPasswordEmptyError(R.string.error_password_empty);
return;
}
view.showProgressDialog();
service.login(email,password,this);
}
@Override
public void onLoginSuccess() {
view.hideProgressDialog();
view.startMoviesActivity();
}
@Override
public void onLoginFailure() {
view.hideProgressDialog();
view.showUnsuccessfulLoginError(R.string.error_login_unsuccessful);
}
}
public class LoginService implements LoginContract.ILoginService {
@Override
public void login(String username, String password, final
OnLoginFinishedListener listener) {
// Contains REST API which calls listener.onLoginSuccess() on valid credentials and listener.onLoginFailure on invalid.
}
}
I Problem für die Prüfung schriftlich Test habe onLoginSuccess()
& onLoginFailure()
in LoginPresenter
Klasse wegen der Art, wie ich Schnittstellen verwendet haben. Wenn der Anruf an service.login(email,password,this);
getätigt wird, sollte er den Aufruf an diese Methode in LoginPresenter
zurückgeben, die im Gegenzug zu startMoviesActivity()
Methode in LoginActivity
ruft. Ich bin ein Anfänger zum Spott ... wenn du helfen könntest. Danke.