Gee*_*aat 7 spring unit-testing reactive spring-webflux
我正在开发一个使用 Spring WebFlux 堆栈的项目。我们有一个控制器,您可以在其中订阅特定对象的更新。此控制器返回EmitterProcessor
客户端可以订阅的位置。当某些内容在 上发布时EmitterProcessor
,订阅的客户端会收到通知。
这在实践中效果很好,但我的单元测试失败了。单元测试使用WebTestClient,它在exchange()
操作返回 a时阻塞EmitterProcessor
(也尝试了其他FluxProcessor
实现,例如UnicastProcessor
)。我得到的错误如下:
java.lang.IllegalStateException:5000 毫秒的阻塞读取超时
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:117)
at reactor.core.publisher.Mono.block(Mono.java:1524)
at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultRequestBodyUriSpec.exchange(DefaultWebTestClient.java:283)
Run Code Online (Sandbox Code Playgroud)
我找到了这个线程,它也报告exchange()
了WebTestClient
块上的方法,但正如那里所解释的那样,它只是为了检索状态和标题而阻塞,所以这应该不是问题。此外,在Flux
返回a 的情况下,这可以正常工作,如引用的testcase 所示。
我创建了一个从引用的测试用例派生的简单测试用例,并将其调整为Flux
在一种情况下返回 a ,EmitterProcessor
在另一种情况下返回an (失败)。您可能会注意到, 的断言EmitterProcessor
应该失败,但由于阻塞exchange()
调用,它永远不会到达那里。
另请注意,当我取消注释该行时processor.onNext("hello");
,将返回此内容并且测试用例成功。
at reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:117)
at reactor.core.publisher.Mono.block(Mono.java:1524)
at org.springframework.test.web.reactive.server.DefaultWebTestClient$DefaultRequestBodyUriSpec.exchange(DefaultWebTestClient.java:283)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1876 次 |
最近记录: |