2017-08-21 11 views
1

私はmvpパターンに基づいてアプリのためのmockitoテストを書いています。以下は、私はので、私はインターフェイスを使用している方法のLoginPresenterクラスでonLoginSuccess() & onLoginFailure()をチェックするためのテストを書くことで問題を抱えていログイン・アクティビティーユニットテスト - リスナーを模擬する方法

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. 
    } 
} 

ためのコードです。 service.login(email,password,this);に電話がかかったときは、LoginPresenterのメソッドに戻り、startMoviesActivity()メソッドを呼び出してLoginActivityに戻ります。私はあなたが助けることができるならば、初心者です。ありがとうございました。

答えて

0

mockitoを使用してコード用に書かれたいくつかのテストを以下に見てください。これらのケースは私のマシンでテストしました。しかし、アンドロイドをテストするためには、Robolectric(http://robolectric.org/)を使用することをお勧めします。これは、基本的にAndroid UIユニットのテスト用に設計されています。カバレッジのパーセンテージは、モッキートと比較してより多くです。


import org.junit.Before; 
import org.junit.Test; 
import org.powermock.core.classloader.annotations.PrepareForTest; 

import static org.mockito.Mockito.doCallRealMethod; 
import static org.mockito.Mockito.mock; 

@PrepareForTest(LoginActivity.class) 
public class LoginActivityTest { 

    private LoginActivity loginActivity; 
    @Before 
    public void setUp() 
    { 
     loginActivity = mock(LoginActivity.class); 
     doCallRealMethod().when(loginActivity).startMoviesActivity(); 
    } 
    @Test 
    public void testStartMovies() 
    { 
     loginActivity.startMoviesActivity(); 
    } 
} 


import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 

    import static org.mockito.Mockito.doCallRealMethod; 
    import static org.mockito.Mockito.mock; 
    import static org.mockito.Mockito.when; 

    @PrepareForTest(LoginPresenter.class) 
    public class LoginPresenterTest { 

     private LoginPresenter loginPresenter; 

     @Before 
     public void setUp() { 
      loginPresenter = mock(LoginPresenter.class); 
      doCallRealMethod().when(loginPresenter).onLoginSuccess(); 
      doCallRealMethod().when(loginPresenter).onLoginFailure(); 
     } 

     @Test 
     public void testLoginSuccess() 
     { 
      loginPresenter.onLoginSuccess(); 
      loginPresenter.onLoginSuccess(); 
     } 
     @Test 
     public void testLoginFailure() 
     { 
      loginPresenter.onLoginFailure(); 
     } 
    } 
関連する問題