首页 > 解决方案 > 使用 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 测试运行时不会打印。你们中的任何人都可以向我解释我在这里缺少什么...

标签: androidjunitrx-java2

解决方案


请记住,您正在处理异步代码。测试在订阅实际发生之前运行完成。添加 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);
} 

希望有帮助!


推荐阅读