android - 使用 RxJava2 在 android 模拟器和 JVM 上的不同行为
问题描述
这是一个在 Android 模拟器上运行但不在 Junit 测试中的代码片段。
public void startObserving() {
Observable.just(1, 2, 3, 40)
.doOnNext(integer -> System.out.println("doOnNext item " + integer + " on: " + Thread.currentThread().getName()))
.subscribeOn(Schedulers.computation())
.observeOn(Schedulers.single())
.subscribe(integer -> System.out.println("Consuming item " + integer + " on: " + Thread.currentThread().getName()));
}
当我在 Android Emulator 上运行此方法时会打印 doOnNext() 和 subscribe() 中的日志,但当我将其作为 JUnit 测试运行时不会打印。你们中的任何人都可以向我解释我在这里缺少什么...
解决方案
请记住,您正在处理异步代码。测试在订阅实际发生之前运行完成。添加 sleep 语句可以验证这一点:
@Test
public void startObserving() throws Exception {
Observable.just(1, 2, 3, 40)
.doOnNext(integer -> System.out.println("doOnNext item " + integer + " on: " + Thread.currentThread().getName()))
.subscribeOn(Schedulers.computation())
.observeOn(Schedulers.single())
.subscribe(integer -> System.out.println("Consuming item " + integer + " on: " + Thread.currentThread().getName()));
Thread.sleep(3000);
}
希望有帮助!
推荐阅读
- c# - 通过 AuthenticationState 在 Blazor 客户端 Web 程序集中检索自定义声明
- c++ - 使用从 PyTorch 转换的相同 ONNX 模型时,OpenCV 一分为二地崩溃
- flutter - Flutter 中 RenderFlex 溢出和不正确使用父小部件的解决方案是什么?
- c# - 连一个连接都打不开:超时。在从池中获取连接之前经过的超时时间
- testing - 如何获取所有标签下的在testcafe
- clojure - 使用clojure,有没有更好的方法从序列中删除一个项目,这是地图中的值?
- java - 无法重新连接以在客户端节点上启动集群
- facebook-php-sdk - 无法加载 URL:此 URL 的域不包含在应用程序的域中
- deployment - 我可以使用 Chocolatey 创建 UWP 应用部署包吗?
- sql - SQL Server 中按位运算的替代方法 >> 列中超过 62 位