【发布时间】:2017-11-14 02:53:53
【问题描述】:
您好,我尝试使用 mockito 来验证用户密码,如果无效我想验证它显示错误消息。
但我收到以下错误:
Wanted but not invoked:
loginView.showPasswordError();
-> at android.fanjavaid.com.tdd_android_login.LoginActivityTest.invalidPassword_notLoggedIn_showPasswordError(LoginActivityTest.java:84)
However, there was exactly 1 interaction with this mock:
loginView.showEmailError();
-> at android.fanjavaid.com.tdd_android_login.presenter.LoginPresenterImpl.validateInput(LoginPresenterImpl.java:23)
这是我的测试方法:
@Test
public void invalidEmail_notLoggedIn_showEmailError() {
LoginPresenter presenter = new LoginPresenterImpl(loginView, validator);
presenter.validateInput(user);
verify(loginView).showEmailError();
}
@Test
public void invalidPassword_notLoggedIn_showPasswordError() {
when(user.getEmailAddress()).thenReturn("fanjavaid@gmail.com");
LoginPresenter presenter = new LoginPresenterImpl(loginView, validator);
presenter.validateInput(user);
verify(loginView).showPasswordError();
}
我已经使用有效输入模拟invalidPassword_notLoggedIn_showPasswordError() 中的电子邮件用户,但我仍然收到该错误消息。
这是我的 Presenter 实现:
@Override
public void validateInput(User user) {
if (!validator.validateEmail(user.getEmailAddress())) {
view.showEmailError();
} else if (validator.validatePassword(user.getPassword())) {
view.showPasswordError();
}
}
我错过了什么?
谢谢
【问题讨论】:
-
能否在测试方法和真实方法中调试检查对象loginView引用?如果它们不同,则 mockito 适合验证失败。
-
很高兴您的问题得到了解答!为了让回答者更容易知道你已经把它整理好了,并且为了让未来的读者找到你的解决方案,请编辑你的解决方案,into a self-answer你可以稍后接受。
标签: java android junit mockito android-mvp