【发布时间】:2016-03-12 19:36:59
【问题描述】:
我正在对连接到服务并返回令牌的 Presenter 类进行单元测试 当用户从调用 REst 服务的异步任务接收到令牌时,主屏幕将启动。如果令牌为空,则会显示错误
public void onSignInButtonClicked() {
String username = mSigninView.getUsername();
if (username.isEmpty()) {
mSigninView.showUsernameError(R.string.username_error);
return;
}
String password = mSigninView.getPassword();
if (password.isEmpty()) {
mSigninView.showPasswordError(R.string.password_error);
return;
}
String token = mSigninService.connectToRestServices(username, password);
if (token != null) {
mSigninView.startHomeActivity(token);
} else {
mSigninView.showLoginError(R.string.login_error);
}
}
对于单元测试:
@Test
public void shouldStartHomeScreenWhenUsernameAndPasswordAreCorrect() throws Exception {
Mockito.when(mView.getUsername()).thenReturn("test@test.com");
Mockito.when(mView.getPassword()).thenReturn("test");
Mockito.when(mService.connectToRestServices("test@test.com", "test")).thenReturn("test");
mPresenter.onSignInButtonClicked();
Mockito.verify(mView).startHomeActivity("test");
}
测试时出错
需要但未调用: signin_View.startHomeActivity("test"); -> 在 com.ssd.cypress.uimobile.SigninPresenterTest.shouldStartHomeScreenWhenUsernameAndPasswordAreCorrect(SigninPresenterTest.java:72)
在代码中 字符串令牌 = mSigninService.connectToRestServices(用户名,密码); 它连接到具体类并且令牌为空。有没有办法模拟这个 connectToService 以便它返回 SomeValue。
【问题讨论】:
-
如果我没记错的话,你的令牌不为空,它会尝试执行 startHomeActivity("test")。所以它确实返回“SomeValue”。尝试在调试模式下执行单元测试,看看在进行空比较之前得到的 token 值到底是什么。
-
感谢您的回复!!!令牌始终为空。在我的代码中,演示者的构造函数是
-
public SigninPresenter(Signin_View view) { mSigninView = view; mSigninService = new Sign_in_service(); }
-
这里当演示者被模拟时,它会创建一个我无法控制的新服务对象。这个应用程序被编写为 MVP 模式,其中服务在 Presenter 层中初始化。此对象返回的令牌始终为 null。
-
请告诉我当构造函数像上面那样时如何对Presenter类进行单元测试?
标签: java android unit-testing mockito