gpt4 book ai didi

java - Mockito 错误 : However, 与此模拟进行了 1 次交互

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:52 26 4
gpt4 key购买 nike

您好,我尝试使用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();
}
}

我缺少什么?

谢谢

最佳答案

✔ ANSWER

经过几分钟再次探索,我发现了一些有趣的东西。我忘记向一类添加模拟。下面我模拟了一些类,如下所示:

@RunWith(MockitoJUnitRunner.class)
public class LoginActivityTest {

@Mock User user;
@Mock LoginView loginView;
@Mock MyValidator validator;

LoginPresenter presenter;

@Before
public void beforeTest() {
presenter = new LoginPresenterImpl(loginView, validator);
}

...

你可以看到我模拟了 validator 类。

我收到错误是因为在 invalidPassword_notLoggedIn_showPasswordError() 方法中我没有添加用于电子邮件验证的模拟值。

// Mock validation
when(validator.validateEmail(user.getEmailAddress())).thenReturn(true);

如果我不模拟它,它会询问 showEmailError() 但我们只是验证 showPasswordError()

这导致我的实现使用条件来一一检查,从检查电子邮件是否有效开始,然后检查密码是否有效。如果电子邮件不存在并且 validator 的返回值不存在,则会发生错误。

所以我需要将电子邮件地址模拟为有效并模拟 validator 以返回 true(有效电子邮件)。

这就是我的解释,希望可以帮助任何尝试mockito的人。

关于java - Mockito 错误 : However, 与此模拟进行了 1 次交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47276920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com