【发布时间】:2020-05-04 15:57:57
【问题描述】:
我尝试切换到 when() 并得到编译器错误
我已经在同一个项目的另一个测试中成功使用了 doThrow(...),所以我不知道这里发生了什么
单元测试代码:
doThrow(new Exception("the client cancelled the request, ya dingus!")).when(handler).write(any());
MvcResult result = mockMvc.perform(post("/myPath")
.content(String.valueOf(mockValidRequest))
.contentType(MediaType.APPLICATION_JSON)
.characterEncoding("utf-8"))
.andExpect(status().is5xxServerError())
.andReturn();
我正在测试的代码(/myPath 的处理程序方法):
@PostMapping("/myPath")
public ResponseEntity<String> handleRequest(@RequestBody MyPojo request) {
try {
handler.write(request);
} catch (Exception e) {
return new ResponseEntity<>("Exception thrown during event processing: " + e, HttpStatus.SERVICE_UNAVAILABLE);
}
return new ResponseEntity<>("Success", HttpStatus.OK)
}
问题是测试表明实际结果是 200 成功,此时应该捕获到异常,并且服务不可用 5xx 响应。
【问题讨论】:
-
您能否确保您的被测系统中的
write(...)不被null调用?any()将不匹配null。顺便说一句:您应该输入any()-matcher,例如any(Request.class)(或任何适用的)。 -
是的,我通常键入匹配器类,但只是试图概括问题并删除我的 POJO 名称......但是,是的,当我调试时,“请求”不为空,所以它不会被调用null (也没有显示 null 检查,防止 null 被传递给 write() 方法
-
@Turing85 lmk 如果您对解决方案有任何想法...我想知道 MVC 单元测试和监视方法是否存在一些扭结或限制
-
不,抱歉。我是空白的。必须在调试器中自己查看程序。
-
@Turing85 我的意思是我在下面发布的解决方案......直接调用处理程序方法而不是使用 mockmvc
标签: java spring exception junit mockito