使用spring webflux WebClient测试虚拟时间时出现问题
当我使用使用spring webflux WebClient测试虚拟时间时出现问题,spring,spring-webflux,Spring,Spring Webflux,当我使用monoFromSupplier作为selectedMono时,以下测试通过。 然而,当我切换到monoFromWebClient时,它不能正确地提前时间。我做错了什么 StepVerifier.withVirtualTime(() -> { Mono<String> monoFromSupplier = Mono.fromSupplier(() -> "AA") .doOnNext(po ->
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();
StepVerifier.withVirtualTime(()->{
Mono monoFromSupplier=Mono.fromSupplier(()->“AA”)
.doOnNext(po->{
System.out.println(“monoFromSupplier:onNext”+Thread.currentThread().getName());
});
Mono monoFromWebClient=WebClient.create(“http://...")
.get()
.retrieve()
.bodyToMono(String.class)
.doOnNext(po->{
System.out.println(“monoFromWebClient:onNext”+Thread.currentThread().getName());
});
Mono selectedMono=来自供应商的Mono;
返回selectedMono.repeatWhen(companion->companion.take)(3)
.延迟至(r->{
持续时间dur=持续时间秒(500);
System.out.println(“延迟…”+dur);
返回单频延迟(dur);
}))
.last()
.log();
})
.然后等待(持续天数(1))
.expectNextCount(1)
.expectComplete()
.verify();
Reactor虚拟时间支持仅在单个JVM中起作用-它通过更改调度程序的时钟来起作用(通常使其运行得更快)WebClient
此处跨越网络边界并发送真实的HTTP请求-Reactor无法操纵真实的物理时间
TL;博士这是不受支持的