Android 调用哪个回调函数的Mockito测试
我想在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
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();}