遇到mock打桩不生效的问题
------------------我是分割线-----------------------
更新
向大佬请教了一下,本质的原因如下
1. mock的目的是为了排除外部依赖,你只管传过来一个该方法需要的参数类型,就可以。
2. 我在mock里写的Path.of,debug的时候跟踪内存地址发现,在业务代码里并不是这个对象,所以打桩无效;而你用any在外面包裹着,只要是这个类型,我就按照打桩的结果去处理。
上代码
业务代码
try {
String path = StringUtils.joinWith("/", reportFile.getFilePath(), reportFile.getFileName());
log.info("------------get into minIO to upload file-------------");
minioService.upload(Path.of(path), file.getInputStream());
//想要在这里mock一下,走到这里的时候抛异常,被捕获到以后抛出400错误
log.info("------------upload file success-------------");
} catch (MinioException | IOException e) {
e.printStackTrace();
throw new BadRequestException("attachment file upload fail");
}
单元测试代码
doThrow(MinioException.class).when(minioService).upload(Path.of(anyString), any(InputStream.class));
Assertions.assertThrows(BadRequestException.class, () -> attachmentService.addAttachment(HOSP_CODE, REPORT_ID, attachmentDto, multipartFile));
此时不管怎么写,都是这个错误
文章来源:https://www.toymoban.com/news/detail-505293.html
原因:mock打桩的时候参数不正确,这个时候不管你怎么写,这个桩点都不会出发
正确的写法:
// 注意看这里,原来是Path.of(anyString())
doThrow(MinioException.class).when(minioService).upload(any(Path.class), any(InputStream.class));
Assertions.assertThrows(BadRequestException.class, () -> attachmentService.addAttachment(HOSP_CODE, REPORT_ID, attachmentDto, multipartFile));
总结
参数不对,努力白费。文章来源地址https://www.toymoban.com/news/detail-505293.html
到了这里,关于mock打桩不生效的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!