【mockito】SpringBoot单元测试Mock测试快速上手

背景

Mock测试就是在测试某个方法的时候避免去构建全部的依赖,而是通过Mock去模拟这些依赖,通过自定义依赖的返回结果,从而更专注的去测试这个方法本身,如下图所示。

下面以发送邮件的业务代码为例。

一、单元测试

将发送业务代码直接嵌入测试类,模拟调用

public class BaseNoticeHandlerServiceImplTest {
 
    private static final Logger log = LoggerFactory.getLogger(BaseNoticeHandlerServiceImplTest.class);
 
    void sendMail(MailBo mail) throws Exception {
        JSONObject responseBody = new JSONObject();
        responseBody.put("code", 200);
        responseBody.put("message", "邮件发送成功");
        try {
            Integer code = responseBody.getInteger("code");
            if (code == ResultCode.SUCCESS.getCode()) {
                log.info(responseBody.toString());
            } else {
                throw new ServiceException(responseBody.toString());
            }
        } catch (FeignException fe) {
            log.error("邮件发送服务出错:{}", fe.getMessage(), fe);
            throw fe;
        } catch (Exception e) {
            log.error("邮件发送出错:{}", e.getMessage());
            throw e;
        }
        log.info("业务类型:{}, 发件人昵称:{}, 收件人:{}, 抄送人:{}, 邮件主题:{}", mail.getBizType(), mail.getNickName(), mail.getSendTo(), mail.getSendCopyTo(), mail.getSubject());
    }
 
    @Test
    void messenger() {
        List<String> sendTo = Lists.newArrayList("001@qq.com");
        MailBo mail = new MailBo();
        mail.setBizType(1);
        mail.setNickName("test");
        mail.setSendTo(sendTo);
        mail.setSubject("接口测试");
        mail.setText("测试messenger服务邮件接口");
        try {
            this.sendMail(mail);
        } catch (Exception e) {
            log.error("发送失败", e);
        }
    }
}

二、手动创建依赖实例

public class BaseNoticeHandlerServiceImplTest {

    private static final Logger log = LoggerFactory.getLogger(BaseNoticeHandlerServiceImplTest.class);
    private BaseNoticeHandlerServiceImpl baseNoticeHandlerService;
    public BaseNoticeHandlerServiceImplTest() {
        this.baseNoticeHandlerService = new BaseNoticeHandlerServiceImpl();
    }
    @Test
    void messenger() {
        List<String> sendTo = Lists.newArrayList("001@qq.com");
        MailBo mail = new MailBo();
        mail.setBizType(1);
        mail.setNickName("test");
        mail.setSendTo(sendTo);
        mail.setSubject("接口测试");
        mail.setText("测试messenger服务邮件接口");
        try {
            baseNoticeHandlerService.sendEmail(mail);
        } catch (Exception e) {
            log.error("发送失败", e);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ai旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值