Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用哪个回调函数的Mockito测试_Android_Mockito_Junit4 - Fatal编程技术网

Android 调用哪个回调函数的Mockito测试

Android 调用哪个回调函数的Mockito测试,android,mockito,junit4,Android,Mockito,Junit4,我想在mockito中测试用户登录失败的情况 我的界面 public interface OnLoginFinishListener { void onFail(); void onSuccess(); } 我的LoginInteractor类 public class LoginInteractor { public void validateCredentialsAsync(final String email, final String password, final O

我想在mockito中测试用户登录失败的情况

我的界面

public interface OnLoginFinishListener {
  void onFail();

  void onSuccess();
}
我的LoginInteractor类

public class LoginInteractor {

  public void validateCredentialsAsync(final String email, final String password, final OnLoginFinishListener listener) {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if(email.equals("sample@email.com") && password.equals("123456")){
                listener.onSuccess();
            }else {
                listener.onFail();
            }
        }
    }, 5000);
  }
}

如何为登录失败的情况编写测试,谢谢

可能您想要模拟您的onloginfishlistener并验证它是否调用

            LoginInteractor in = new LoginInteractor();
            OnLoginFinishListener mockListner = mock(OnLoginFinishListener.class);
            doAnswer(new Answer<Void>() {

                @Override
                public Void answer(InvocationOnMock invocation) throws Throwable {
                    // TODO Auto-generated method stub
                    return null;
                }
            }).when(mockListner).onFail();
            doAnswer(new Answer<Void>() {

                @Override
                public Void answer(InvocationOnMock invocation) throws Throwable {
                    // TODO Auto-generated method stub
                    return null;
                }
            }).when(mockListner).onSuccess();
            in.validateCredentialsAsync("sample@email.com","wrong",mockListner);
            verify(mockListner,times(1)).onFail();
            verify(mockListner,never()).onSuccess();
LoginInteractor in=new LoginInteractor();
OnLoginFinishListener mockListner=mock(OnLoginFinishListener.class);
doAnswer(新答案){
@凌驾
公共Void应答(invocationmock调用)抛出可丢弃的{
//TODO自动生成的方法存根
返回null;
}
}).when(mockListner).onFail();
doAnswer(新答案){
@凌驾
公共Void应答(invocationmock调用)抛出可丢弃的{
//TODO自动生成的方法存根
返回null;
}
}).when(mockListner).onSuccess();
in.validateCredentialAsync(“sample@email.com“,”错“,mockListner);
验证(mockListner,times(1)).onFail();
验证(mockListner,never()).onSuccess();

您希望测试
onFail()
方法还是失败场景?您为失败场景尝试了什么?@SabirKhan我正在学习android中的测试框架,所以我想测试失败场景,谢谢您抱歉,我在运行您的测试时遇到了问题
需要但未调用:onLoginFinishListener.onFail();->实际上,在com.android.droidtemplate.login.LoginPresenterTest.testLoginFail(LoginPresenterTest.java:74)上,与此模拟的交互为零。
第74行:验证(mockListner,times(1)).onFail()//fail应该被称为
@meowmeo,是的,我没有注意到runnable。您需要使用doAnswer()。我已经更新了应答,很抱歉,我出现了错误:
需要但未调用:onLoginFinishListener.onFail();->实际上,在com.android.droidtemplate.login.LoginPresenterTest.testLoginFail(LoginPresenterTest.java:83)上,没有与这个模拟的交互
,第83行:
verify(mockListner,times(1)).onFail()处理程序类中的线程是否正确启动。可能您缺少/忘记调用runnable at,postDelayed(runnable r,intx){r.run();}