【问题标题】:Problem with testing virtual time with spring-webflux WebClient使用 spring-webflux WebClient 测试虚拟时间的问题
【发布时间】:2018-10-10 09:50:17
【问题描述】:

当我使用 monoFromSupplier 作为 selectedMono 时,以下测试通过。 但是,当我切换到 monoFromWebClient 时,它并没有正确地提前时间。我在这里做错了什么?

StepVerifier.withVirtualTime(() -> {
            Mono<String> monoFromSupplier = Mono.fromSupplier(() -> "AA")
                    .doOnNext(po -> {
                        System.out.println("monoFromSupplier:onNext " + Thread.currentThread().getName());
                    });

            Mono<String> monoFromWebClient = WebClient.create("http://...")
                    .get()
                    .retrieve()
                    .bodyToMono(String.class)
                    .doOnNext(po -> {
                        System.out.println("monoFromWebClient:onNext " + Thread.currentThread().getName());
                    });


            Mono<?> selectedMono = monoFromSupplier; 
            return selectedMono.repeatWhen(companion -> companion.take(3)
                    .delayUntil(r -> {
                        Duration dur = Duration.ofSeconds(500);
                        System.out.println("delay... " + dur);
                        return Mono.delay(dur);
                    }))
                    .last()
                    .log();

        })
                .thenAwait(Duration.ofDays(1))
                .expectNextCount(1)
                .expectComplete()
                .verify();

【问题讨论】:

    标签: spring spring-webflux


    【解决方案1】:

    Reactor 虚拟时间支持仅在单个 JVM 中工作 - 它通过更改 Scheduler 的时钟来工作(通常使其滴答声更快)。 WebClient 这里跨越网络边界并发送一个真实的 HTTP 请求 - Reactor 无法操纵真实的物理时间。

    TL;DR;不支持。

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2017-12-31
      • 2019-04-13
      • 2018-05-09
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2020-01-30
      • 2018-06-14
      相关资源
      最近更新 更多