我试图用@WebfluxTest
测试我的控制器的异常路径,但它总是抛出服务器异常,然后返回500错误。
测试代码是here:
@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
正确地在后台捕获,但在我的RestExceptionHandler
测试中,它不是由我的自定义@WebfluxTest
处理的。
对于这个问题的未来受众,这个问题由问题的作者提出为an issue against the Spring Boot issue tracker,并且已经通过在WebExceptionHandler
中添加对@WebFluxTest
的支持而得到解决,因此有问题的代码应该正常工作,因为当时尚未发布的the Spring Boot 2.1.0.M3写作