내 응용 프로그램에 MVP가 있습니다. 발표자는 인터페이스안드로이드 단위 테스트
public interface ILoginPresenter<V> extends Presenter<V> {
void logUserIn(String email, String password, String deviceToken, String deviceType);
}
실현을 가지고 RX 싱글
mLoginSubscription = mModel.logUserIn(email, password, deviceToken, deviceType)
.compose(RxUtil.setupNetworkSingle())
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
Timber.i("Log in complete");
}
@Override
public void onError(Throwable e) {
Timber.e(e, "Retrofit could not get User.");
getView().dismissProgressDialog();
}
@Override
public void onNext(UserResponseRetrofit response) {
Timber.i("Retrofit is attempting to get User");
mSaveModel.saveUser(user);
getView().dismissProgressDialog();
getView().goToMenuActivity();
}
});
이 또한 내가 대거
에 대한 다음과 같은@Module
public class ModelModule {
@Provides
@ScreenScope
public ILoginModel provideLoginModel(LoginModel p) {
return p;
}
}
내 단위 테스트보기 모듈이 있습니다
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, manifest = "/src/main/AndroidManifest.xml")
public class LoginPresenterTest {
public static final String SOME_OTHER_TOKEN = "someOtherToken";
private AppComponent mAppComponent;
private LoginComponent mLoginComponent;
private ILoginView mockView;
private ModelModule mockModel;
private ILoginPresenter mLoginPresenter;
@Before
public void setup() {
// Creating the mocks
mockView = Mockito.mock(ILoginView.class);
mockModel = Mockito.mock(ModelModule.class);
ILoginModel mock = Mockito.mock(ILoginModel.class);
User urr = Mockito.mock(User.class);
Mockito.when(mockModel.provideLoginModel(null)).thenReturn(mock);
Mockito.when(mock.logUserIn("", "", "", "")).thenReturn(ScalarSynchronousSingle.just(urr));
mAppComponent = DaggerAppComponent.builder()
.appModule(new AppModule(RuntimeEnvironment.application))
.build();
mLoginComponent = DaggerLoginComponent.builder()
.appComponent(mAppComponent)
.modelModule(mockModel)
.presenterModule(new PresenterModule())
.build();
mLoginPresenter = mLoginComponent.provideLoginPresenter();
mLoginPresenter.setView(mockView);
}
@Test
public void testLogin() {
mLoginPresenter.logUserIn("", "", "", "");
try {
java.lang.Thread.sleep(20000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Mockito.verify(mockView).dismissProgressDialog();
}
그래서 사용을 내가 필요로하는 단검 Presenter를 올바르게 작성하십시오. 이 목적을 위해, 나는 Mockito.when를 사용하려고 노력하고있다. 먼저이 라인이 작동하지 않는 것처럼 보입니다.
Mockito.when(mockModel.provideLoginModel(null)).thenReturn(mock);
목표는 Single을 반환하는 모델 구현을 사용하는 것입니다.
ModelModule의 모의이 작동하지 않는 이유를 정말로 이해하지 못합니까?
작동하지 않는다는 것은 무엇을 의미합니까? 네가 모의를 돌려주지 않는다는 뜻인가요? 단검이'provideLoginModel'을 인수'null'로 호출하고 있습니까? 만약 당신이 그 논쟁에 신경 쓰지 않는다면,'Mockito.when (mockModel.provideLoginModel (any))). then return (mock);' – cyroxis
'any()'- 다른 몇 가지 내 질문에 대한 대답이다. –
Great I 미래의 독자를 돕기 위해 내 대답을 업데이트했습니다. – cyroxis