android - 为什么我的 RxJava Observable 没有完成?

标签 android rx-java

我正在尝试针对登录请求测试此可观察对象,但永远不会调用订阅者的 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/

相关文章:

android - 在哪里可以下载Google的android程序包? (不是应用程序)

android - 小部件预览保存位置

Android:检测何时启动另一个 Activity (或您的 Activity 失去焦点)

java - react 堆核心 - java.lang.IllegalStateException : Queue full? !在 Hot Publisher (ConnectableFlux) 上

android - Ionic Android 内部共享内存

android - 使用 Activity 作为偏好 Activity ?

rx-java - 为在 Vert.X 中运行的 RxJava 设置 Hystrix 崩溃的请求上下文

android - 如何暂停/恢复 Observable?

安卓 map 框 : How to unregister IntentReceiver?

java - 如何将 Observable<byte[]> 转换为 Observable<String>?