Java 如何在模型视图presenter架构android中使用mockito测试presenter类
我想使用mockito为presenter类创建一个测试,尝试了几种方法,但在下面提到了错误。我正在关注这些链接和我的演示者课程Java 如何在模型视图presenter架构android中使用mockito测试presenter类,java,android,unit-testing,mockito,mvp,Java,Android,Unit Testing,Mockito,Mvp,我想使用mockito为presenter类创建一个测试,尝试了几种方法,但在下面提到了错误。我正在关注这些链接和我的演示者课程 public class SignInPresenterImpl extends BasePresenterImpl implements SignInPresenter { private SignInView mSignInView; private SignInInteractor mSignInInteractor; /**
public class SignInPresenterImpl extends BasePresenterImpl implements SignInPresenter {
private SignInView mSignInView;
private SignInInteractor mSignInInteractor;
/**
* Constructor
*
* @param signInView the associated SignIn view
*/
public SignInPresenterImpl(@NonNull final SignInView signInView) {
mSignInView = signInView;
mSignInInteractor = new SignInInteractorImpl();
}
@Override
public void onSignInClicked(final String email, final String password) {
// checking for validation
if (!ValidationUtil.checkEmail(email)) {
mSignInView.showErrorMessage(R.string.error_invalid_email);
return;
}
if (!ValidationUtil.checkPassword(password)) {
mSignInView.showErrorMessage(R.string.error_invalid_password);
return;
}
mSignInView.showLoading();
mSignInInteractor.login(email, password, new BaseInteractor.ApiListener() {
@Override
public void onSuccess(final CommonResponse commonResponse) {
//todo handle success
}
@Override
public void onFailure(final ApiError apiError, final Throwable throwable) {
if (isViewAttached()) {
mSignInView.hideLoading();
if (apiError != null) {
mSignInView.showErrorMessage(apiError.getMessage());
} else {
// resolve error through throwable
mSignInView.showErrorMessage(parseThrowableMessage(throwable));
}
}
}
});
}
}
我的演示者测试课是
public class SignInPresenterImplTest {
@Mock
BaseInteractor.ApiListener listener;
@Mock
private SignInView mSignInView;
@Mock
private SignInInteractor mSignInInteractor;
private SignInPresenter signInPresenter;
@Before
public void setUp() throws Exception {
// Mockito has a very convenient way to inject mocks by using the @Mock annotation. To
// inject the mocks in the test the initMocks method needs to be called.
MockitoAnnotations.initMocks(this);
//Get a refrence to the class test.
signInPresenter = new SignInPresenterImpl(mSignInView);
}
@Test
public void signInAndShowProgress() {
signInPresenter.onSignInClicked("", "");
mSignInView.showErrorMessage("");
verify(mSignInView).showLoading("Loading");
}
}
mSignInView显示以下错误
需要但未调用:mSignInView.showLoading(“加载”)
请建议我如何以正确的方式实现测试用例,我在其中做错了什么
提前感谢在您测试的方法中,
showLoading
方法被调用,没有属性。。我认为您应该预料到这一点,并可能验证没有显示任何错误消息:
@Test
public void signInAndShowProgress() {
signInPresenter.onSignInClicked("", "");
verify(mSignInView, times(0)).showErrorMessage(Mockito.any(String.class));
verify(mSignInView).showLoading();
}
同样的问题再次出现“需要但未调用:mSignInView.showLoading();”您是否检查了ValidationUtil检查是否通过且方法是否未返回?我已经为ValidationUtils类创建了不同的测试用例。是否需要将该代码粘贴到此处。只需确保
ValidationUtil.checkEmail(email)
和ValidationUtil.checkPassword(password)
的计算结果为true,否则测试将永远不会成功。可能您需要传递除空字符串以外的其他内容作为输入:“
好的,让我在没有空字符串的情况下尝试一下