使用 spring-webflux WebClient 测试虚拟时间时出现问题

Problem with testing virtual time with spring-webflux WebClient

当我使用 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();

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

TL;DR;这是不支持的。