我正在尝试使用 @WebfluxTest
测试控制器的异常路径,但它总是抛出服务器异常,然后返回 500 错误。
测试代码在这里:
@Test
@Ignore // ignore it temporarily
public void getPostByNonExistedId_shouldReturn404() {
given(posts.findById("1"))
.willReturn(Mono.empty());
client.get().uri("/posts/1").exchange()
.expectStatus().isNotFound();
verify(this.posts, times(1)).findById(anyString());
verifyNoMoreInteractions(this.posts);
}
控制器代码为:
@GetMapping("/{id}")
public Mono<Post> get(@PathVariable("id") String id) {
return this.posts.findById(id).switchIfEmpty(Mono.error(new PostNotFoundException(id)));
}
PostNotFoundException
在后台正确捕获,但在我的@WebfluxTest
测试中,我的自定义RestExceptionHandler
无法处理它。
对于这个问题的未来受众,这个问题是由问题的作者作为针对 Spring Boot 问题跟踪器提出的,并且已通过在 @WebFluxTest
中添加对 WebExceptionHandler
的支持来解决,因此有问题的代码应该从 Spring Boot 2.1.0.M3 开始工作,在撰写本文时尚未发布。