mock打桩不生效的问题

遇到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));

此时不管怎么写,都是这个错误

错误信息

原因: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));

总结

参数不对,努力白费。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值