我正在尝试针对登录请求测试此可观察对象,但永远不会调用订阅者的 onNext 和 onCompleted 方法。
return mDeviceRepository.getDeviceId()
.flatMap(new Func1<String, Observable<LoginResponse>>() {
@Override
public Observable<LoginResponse> call(String deviceId) {
return mAuthRepository.login(deviceId, mUsername, mHashedPassword);
}
})
.flatMap(new Func1<LoginResponse, Observable<LoginResponse>>() {
@Override
public Observable<LoginResponse> call(LoginResponse loginResponse) {
mSessionRepository.storeSession(UserSession.fromLoginReponse(loginResponse));
mUserRepository.storeUser(loginResponse.getUser());
return Observable.just(loginResponse);
}
});
我的测试是这样的:
loginUseCase.setCredentials("testuser", "testpassword");
when(mockDeviceRepository.getDeviceId()).thenReturn(Observable.just("testdeviceid"));
when(mockAuthRepository.login("testdeviceid", "testuser", "testpassword")).thenReturn(Observable.just(new LoginResponse()));
testSubscriber = new TestSubscriber();
loginUseCase.buildUseCaseObservable().toBlocking().subscribe(testSubscriber);
testSubscriber.assertCompleted();
testSubscriber.assertValueCount(1);
最佳答案
在 TestSubscriber 中用 assertTerminalEvent() 代替 assertCompleted() 怎么样? 您的所有运算符都在同一个线程上运行,因此如果达到 TestSubscriber 断言,则会在流中的某处抛出异常
关于android - 为什么我的 RxJava Observable 没有完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319004/