遇到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();thrownewBadRequestException("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));
此时不管怎么写,都是这个错误
原因: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));
总结
参数不对,努力白费。
版权归原作者 P城执法官 所有, 如有侵权,请联系我们删除。