Spring Boot控制器saveBooking方法单元测试失败问题求助
问题分析与解决方案
这问题其实很直观,核心原因就是字符串大小写不匹配导致的断言失败!
咱们来拆解一下:
- 你的
BookingController里,saveBooking方法返回的是全大写的字符串:return "SAVED"; - 但单元测试
BookingControllerTest里,断言的却是首字母大写、其余小写的字符串:.andExpect(content().string("Saved"));
Postman调用时你可能没留意这个大小写差异,或者说Postman只是验证接口能正常返回内容,不会做这么严格的精确字符串匹配,所以看起来功能正常;但MockMvc的content().string()是做精确完全匹配的,大小写不同自然就触发断言错误了。
修复方案(二选一即可)
方案1:修改测试代码的断言(推荐,保持业务代码逻辑不变)
把断言里的字符串改成和控制器返回一致的全大写:
mockMvc.perform(requestBuilder) .andDo(print()) .andExpect(status().isOk()) .andExpect(content().string("SAVED")); // 这里改成全大写
方案2:修改控制器的返回值(如果业务确实需要返回"Saved")
调整控制器的返回字符串:
return "Saved";
小提示
单元测试中的字符串断言一定要和接口实际返回的内容完全一致,包括大小写、空格、甚至特殊字符,MockMvc的精确匹配特性会严格校验每一个字符,这点在写测试时要格外注意哦~
内容的提问来源于stack exchange,提问作者Faheem azaz Bhanej
相关产品推荐
相关产品推荐

