【问题标题】:Mockito test which callback calledMockito 测试调用了哪个回调
【发布时间】:2016-01-05 05:11:24
【问题描述】:

我想在 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);
  }
}

如何编写登录失败案例的测试,谢谢

【问题讨论】:

  • 您想测试onFail() 方法或失败场景?你尝试过什么失败的场景?
  • @SabirKhan 我正在学习android中的测试框架,所以我想测试失败场景,谢谢

标签: android mockito junit4


【解决方案1】:

也许你想模拟你的 OnLoginFinishListener 并验证它是否被调用

            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();

【讨论】:

  • 对不起,我在运行你的测试时遇到问题Wanted but not invoked: onLoginFinishListener.onFail(); -&gt; at com.android.droidtemplate.login.LoginPresenterTest.testLoginFail(LoginPresenterTest.java:74) Actually, there were zero interactions with this mock.
  • line 74: verify(mockListner, times(1)).onFail();//fail should be called
  • @meowmeo,是的,我没有注意到可运行文件。您需要使用 doAnswer()。我已经更新了答案
  • 很抱歉我有错误:Wanted but not invoked: onLoginFinishListener.onFail(); -&gt; at com.android.droidtemplate.login.LoginPresenterTest.testLoginFail(LoginPresenterTest.java:83) Actually, there were zero interactions with this mock,第 83 行:verify(mockListner,times(1)).onFail();
  • 您是否在 Handler 类中正确启动了线程。可能您缺少/忘记在 postDelayed(Runnable r, int x){ r.run(); 处调用 runnable }
猜你喜欢
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多