java - Rx 异步未执行

标签 java rx-java

想要使用 RxJava 执行异步请求。但可以执行Request.add()。你能帮我通过这个junit吗?

public class Rizze_debug_Rxjava_Test extends METRICS_JUNIT{


    @Test 
    public void testR2_JEOR(){

        logger.info("trace 1 ");        
        Observable<String> obs = Observable.create((Subscriber<? super String> s) -> {
            try {

                logger.info("//processsing");       
                Request.add();
            } catch (Exception e) {
                e.printStackTrace();
                s.onError(e);
            }       

            logger.info("//done");
            s.onNext("done");
            s.onCompleted();
        });
        logger.info("trace 2"); 
        obs.subscribeOn(Schedulers.io());


        assertEquals(1,Request.i);
        logger.info("trace 3"); 
    }


    public static class Request{
        public static int i =0;
        public static void add(){
            i++;
        }
    }


}

最佳答案

像这样的 Observable 本身只是描述您想要执行的异步处理管道。它是一个冷 Observable,只有在有订阅时才会开始发送数据,因此您需要调用一种形式的订阅或另一种形式。

请注意,这里订阅时的发射速度会非常快,因为它基本上在订阅时执行循环,但对于可以延迟发射项目的真正异步进程,这种方法只需调用 subscribe() 将不起作用,因为控件将立即返回到测试中的下一行,这可能会在异步处理发生之前终止。

对于这些情况,有一个特殊的Subscriber,即TestSubscriber,它允许您阻止测试,直到 Observable 完成或出现错误,然后断言排放/错误。你应该调查一下!

关于java - Rx 异步未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107749/

相关文章:

java - 在 RecyclerView 中从 Firebase 加载图像时出现问题

java - 启动画面 - 如何?

android - 使用 Mockito 进行 JVM 单元测试以测试网络请求的 Retrofit2 和 RxJava

rx-java - 如何跳过错误并继续处理流

android - 何时在 rxjava 中使用 `unSubscribeOn`

java - 在java中将输出打印到.txt文件的问题

java - Stax Parser 解析 CDATA 值

java - RxJava 2 : How to filter items of infinite stream that emits "List<Item>"?

android - Android 中的 Throttle Subject

java - 遍历一组复选框