RxJava 有条件地返回 可能来自 Single<String> 或 Maybe.empty()



我想拥有一个单一的返回类型,或者是null,一个空的,也许是空的。

首先,我称之为获得布尔值的方法:

Single<Boolean> isRemembered()

然后,如果此方法返回true,请调用此方法:

Single<String> getRemembered()

如果,isRemembed((返回true,getRemembered((永远不是零值。

这是我在流中的尝试:

public Maybe<String> getRememberIfExists(){
        return sharedPreferencesRepositoryType.isRemembered()
                .flatMapMaybe(aBoolean -> {
                    if(aBoolean){
                        return sharedPreferencesRepositoryType.getRemembered()
                                .flatMapMaybe(Maybe::just);
                    }else{
                        return Maybe.empty();
                    }
                });
    }

我在Isremembered((返回True and false时都为两者写了一个测试:

@Test
public void getRememberIfExists() {
    when(repository.getRemembered()).thenReturn(Single.just(REMEMBERED));
    when(repository.isRemembered()).thenReturn(Single.just(true));
    TestObserver<String> observer = interactor.getRememberIfExists()
            .test();
    verify(repository).isRemembered();
    verify(repository).getRemembered();
    observer.assertNoErrors()
            .assertComplete()
            .assertValueCount(1);
    assertEquals(REMEMBERED, observer.values().get(0));

}
@Test
public void getRememberIfExistsError(){
    when(repository.isRemembered()).thenReturn(Single.just(false));
    TestObserver<String> testObserver = interactor.getRememberIfExists()
            .test();
    verify(repository).isRemembered();
    testObserver.assertComplete();
    testObserver.assertEmpty();
}

第一个测试成功。第二个失败:

java.lang.AssertionError: Completed! (latch = 0, values = 0, errors = 0, completions = 1)

at:

testObserver.assertEmpty()

关于如何正确编写我的getRememberifexists((方法的任何建议?

根据参考文档, ASSEMTEMTY

返回一个(单身人士(可能会立即调用oncomplete的实例。

因此,请使用" assertnovalues",而不是" Aspertementy":

@Test
public void getRememberIfExistsError(){
    when(repository.isRemembered()).thenReturn(Single.just(false));
    TestObserver<String> testObserver = interactor.getRememberIfExists()
            .test();
    verify(repository).isRemembered();
    testObserver.assertComplete();
    testObserver.assertNoValues()
}

相关内容

最新更新