[英]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.