簡體   English   中英

測試RxJava2 doOnComplete()

[英]Testing RxJava2 doOnComplete()

從下面的代碼中可以看出,我試圖測試在我的存儲庫中發生的doOnComplete()調用的行為。 但是,當我使用Observable.just()模擬我的客戶端的注入依賴項時,不再調用doOnComplete() 我認為這是故意的,根據RxJava2。 我不確定如何解決這個問題。

@Singleton
public class Repository {
    private SomeNetworkClient client;
    private SomeCache cache;

    @Inject
    public Repository(SomeNetworkClient client, SomeCache cache) {
        this.client = client;
        this.cache = cache;
    }

    public Observable<SomeItem> getSomeItem() {
        return client.getSomeItem()
                .doOnComplete(() -> cache.doThisOnComplete())
                .doOnError(throwable -> someError);
    }
}

public class RepositoryTest {
    private Repository testedRepository;
    @Mock
    SomeNetworkClient client;
    @Mock
    SomeCache cache;
    @Mock
    SomeItem someItem;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        testedRepository = new Repository(client, cache);
        when(client.getSomeItem())
            .thenReturn(Observable.just(someItem));
    }

    @Test
    public void thisTestFails() {
        testedRepository.getSomeItem().blockingFirst();
        // This fails because it appears that mocking with
        // Observable.just() makes doOnComplete() not be invoked.
        verify(cache.doThisOnComplete());
    }
}

您的代碼中的問題是, blockingFirst()無需監聽完整事件的發生。 它將立即從流中返回第一個項目並從可觀察中處置

相反,您可以這樣執行斷言:


    testedRepository
            .getSomeItem()
            .test()
            .assertComplete()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM