gpt4 book ai didi

java - 使用单线程调度程序时,RxJava mergeLatest 的单元测试挂起

转载 作者:行者123 更新时间:2023-11-30 02:55:14 24 4
gpt4 key购买 nike

我正在尝试为使用combineLatest的函数编写单元测试。这是我的测试的简化版本:

@Test
public void testCombined() {
RxJavaPlugins.getInstance().registerSchedulersHook(new RxJavaSchedulersHook() {
@Override
public Scheduler getIOScheduler() {
return Schedulers.immediate();
}

@Override
public Scheduler getNewThreadScheduler() {
return Schedulers.immediate();
}

@Override
public Scheduler getComputationScheduler() {
return Schedulers.immediate();
}
});

Observable<String> observable1 = Observable.just("hello");
Observable<String> observable2 = Observable.just("world");

Observable<String> combined = Observable.combineLatest(observable1, observable2, (s1, s2) -> s1 + s2);
String result = combined.toBlocking().first();
System.out.println( result);
}

该测试用例在执行时挂起。如果我删除调度程序 Hook ,它就可以正常运行。知道为什么会出现这种情况以及如何解决这个问题吗?

最佳答案

这是一个known anomaly在 RxJava 中:如果用即时调度程序替换计算调度程序,一些内部管理会阻止运行任何内容。

该修复将成为 1.1.6 的一部分 - 我预计它将在 2 周内发布。

关于java - 使用单线程调度程序时,RxJava mergeLatest 的单元测试挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424962/

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