我想測試一個LoginPresenter
,我正在使用Mockito進行模擬。 Mockito不讓我verify
在SUT上的方法調用,所以我不得不嘲笑它的依賴關係和verify
他們的方法已被LoginPresenter
調用。如何告訴被測試者使用模擬而不是自己的變量
我到了以下情況:
LoginPresenter有一個名爲attemptLogin
方法:
private void attemptLogin(String username, String password) {
new LoginNetworkOperation(username, password).execute();
}
我嘲笑LoginNetworkOperation
和使用的Mockito,verify
方法調用上。
@Test
public void testWhenUserNameAndPasswordAreEnteredShouldAttemptLogin() throws Exception {
LoginView loginView = Mockito.mock(LoginView.class);
LoginNetworkOperation loginNetworkOperation = Mockito.mock(LoginNetworkOperation.class);
Mockito.when(loginView.getUserName()).thenReturn("George");
Mockito.when(loginView.getPassword()).thenReturn("aaaaaa");
loginPresenter.setLoginView(loginView);
loginPresenter.onLoginClicked();
Mockito.verify(loginNetworkOperation.execute());
}
但是,我怎麼做LoginPresenter
使用嘲笑LoginNetworkOperation,而不是它會在attemptLogin
方法之一?我需要將LoginPresenter的設計更改爲使用成員變量,併爲其提供一個setter,這是次優的,因爲方法中的局部變量很多,因爲它僅在那裏使用。
我對這件事情做錯了嗎?
起初,我想驗證LoginPresenter
的attemptLogin
叫,但的Mockito只能驗證嘲笑對象的方法,我不能LoginPresenter
間諜,因爲這是最後(通過AndroidAnnotations
生成)
你可能看看這個答案:http://stackoverflow.com/questions/10585490/androidannotations-and-unit-testing#10621419 –