【问题标题】:Unit testing RxJava using Single.just(true) as the expected result使用 Single.just(true) 作为预期结果对 RxJava 进行单元测试
【发布时间】:2017-11-10 17:26:45
【问题描述】:
Android Studio 3.0
RxJava-1

对以下代码进行单元测试,该代码将返回单个结果,其结果可能为真或假,具体取决于 findLastMessage 是否返回 null。

 public Single<Boolean> hasLocalStorage() {
        return Single.fromCallable(() ->
                chatStorageHelper.findLatestMessage() != null);
    }

在我的测试用例中,我有以下内容: storageHelper 是一个模拟,将在这种情况下返回一个非空值

@Test
    public void testHasLocalStorage_hasLocalStorage_returnTrue() {
        when(storageHelper.findLatestMessage()).thenReturn(new DBMessage());

        final Single<Boolean> result = Single.just(true);
        assertThat(localRepository.hasLocalStorage(), is(result));
    }

但是,测试总是因为这个而失败:

Expected :is <rx.internal.util.ScalarSynchronousSingle@712cfb63> 
Actual   :<rx.Single@32e54a9d>

当我检查Single.just(true) 返回的内容如下:

public static <T> Single<T> just(final T value) {
        return ScalarSynchronousSingle.create(value);
    }

调用 ScalarSynchronousSingle。我想知道如何更改我的测试用例,以便 rx.SingleSingle.just(true) 返回?

非常感谢您的任何建议,

【问题讨论】:

    标签: java android unit-testing rx-java


    【解决方案1】:

    这行不行:

    assertThat(localRepository.hasLocalStorage(), is(result));
    

    因为 Single 是一个值的包装器,它可能会在未来产生。实际上,如果#hasLocalStorage 返回值的引用与结果相同,您就是断言。

    您需要从 hasLocalStorage-Single 和结果中获取值,并比较其值。

    例如,您可以使用 #toBlocking() 并使用 #value() 离开反应式环境。

      @Test
      void name2() throws Exception {
        final Object obj = new Object();
    
        Single<Object> just1 = Single.just(obj);
        Single<Object> just2 = Single.just(obj);
    
        Object value1 = just1.toBlocking().value();
        Object value2 = just2.toBlocking().value();
    
        assertThat(value1).isEqualTo(value2);
      }
    

    【讨论】:

      【解决方案2】:

      问题是您试图断言来自两个不同Single 的引用,一个来自您的测试代码,另一个来自您的生产代码。您需要从构造函数中提供Single,并在您的测试中,在创建该类时发送它。

      【讨论】:

        猜你喜欢
        • 2020-03-07
        • 1970-01-01
        • 2017-09-19
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多