程序员必知必会的Mock技能-结合spring的mock静态方法

一、痛点问题

1.1、如何mock静态方法

1.2、mock很容易造成代码覆盖率的下降,如何提升代码覆盖率

二、准备工作

2.1、技术选型:powerMock

为何常见的Mockito不能mock静态方法

因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。
但PowerMock可以mock静态方法,因为它直接在bytecode上工作。PowerMock是一个JUnit扩展,它利用了EasyMock和Mockito模拟静态method的方法对Java中的静态method进行Mock。

2.2、maven依赖

 <!-- mock 测试工具 -->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-module-junit4</artifactId>
            <version>1.7.4</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.objenesis</groupId>
                    <artifactId>objenesis</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.powermock</groupId>
            <artifactId>powermock-api-mockito</artifactId>
            <version>1.7.4</version>
            <scope>test</scope>
        </dependency>

 

三、项目实战

3.1、需求

对上游的数据做数据验证,如果验证成功则落库,如果验证失败则发告警邮件通知上游的所有收件人(邮件组)。现在单元测试时候不能真的给上游邮件组全体发邮件,需要mock功能,而且为了单元测试的case可以反复执行,上游数据不能真的落库。做到上述的话,还需要尽可能的提升代码覆盖率(公司的高质量战略的要求:代码的行覆盖率需要达到50%以上,这也是研发对自己代码质量的要求)。

3.2、代码实战

@QmqConsumer(prefix = CommissionOrderConstants.orderConfirmTopic, consumerGroup = CommissionConstants.appId)
public void onMessage(Message message) {
    log.info("receive commission order confirm's message.", message);
    long startTime = System.currentTimeMillis();
    try {
        String data = message.getStringProperty("data");
        QmqCommissionOrderConfirmVo commissionOrderConfirmVo = JSON.parseObject(data, QmqCommissionOrderConfirmVo.class);
        this.handle(commissionOrderConfirmVo);
    } catch (SQLException e) {
        log.error("recei
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值