gpt4 book ai didi

java - 测试 RxJava2 doOnComplete()

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:29 25 4
gpt4 key购买 nike

正如您从下面的代码中看到的,我正在尝试测试在我的存储库中发生的 doOnComplete() 调用的行为。但是,当我模拟客户端的注入(inject)依赖项时,我使用 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()不会关心听完整的事件发生。它会立即返回流中的第一项和dispose from observable。 .

相反,您可以这样执行断言:


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

关于java - 测试 RxJava2 doOnComplete(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44448788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com