Mockito:模拟测试框架的具体介绍与使用

本文详细介绍了Mockito这一Java测试框架,通过创建和配置Mock对象,简化依赖于外部系统的类的测试。Mockito的作用包括提前测试、团队并行工作、验证和演示程序的创建以及系统隔离。文中通过实例展示了如何在IDEA中设置测试插件,生成测试代码,并使用Mockito的API进行方法模拟,测试目标类的各个方法。测试用例覆盖了增删查改等多种场景,确保了代码的正确性和测试覆盖率。

我是 ABin-阿斌:写一生代码,创一世佳话,筑一揽芳华。 如果小伙伴们觉得我的文章不错,记得一键三连哦。
在这里插入图片描述

一、什么是Mockito

Mockito 是一个强大的用于 Java 开发的模拟测试框架, 通过 Mockito 我们可以创建和配置 Mock 对象,进而简化有外部依赖的类的测试。

二、有什么作用:

提前创建测试,TDD(测试驱动开发)

  • 如果你创建了一个 Mock 那么你就可以在 service 接口创建之前写 Service Tests 了,这样你就能在开发过程中把测试添加到你的自动化测试环境中了。换句话说,模拟使你能够使用测试驱动开发。

团队可以并行工作

  • 这类似于上面的那点;为不存在的代码创建测试。但前面讲的是开发人员编写测试程序,这里说的是测试团队来创建。当还没有任何东西要测的时候测试团队如何来创建测试呢?模拟并针对模拟测试!
  • 这意味着当 service 接口需要测试时,实际上 QA 团队已经有了一套完整的测试组件;没有出现一个团队等待另一个团队完成的情况。这使得模拟的效益型尤为突出了。

你可以创建一个验证或者演示程序。

  • 由于Mocks 非常高效,Mocks 可以用来创建一个概念证明,作为一个示意图,或者作为一个你正考虑构建项目的演示程序。这为你决定项目接下来是否要进行提供了有力的基础,但最重要的还是提供了实际的设计决策。

隔离系统

  • 有时,你希望在没有系统其他部分的影响下测试系统单独的一部分。由于其他系统部分会给测试数据造成干扰,影响根据数据收集得到的测试结论。使用 mock 你可以移除掉除了需要测试部分的系统依赖的模拟。
  • 当隔离这些 mocks 后,mocks 就变得非常简单可靠,快速可预见。这为你提供了一个移除了随机行为,有重复模式并且可以监控特殊系统的测试环境。

三、具体如何使用:

  • 在使用 Mockito 测试框架时,我们需要提前在 idea 中装一个测试插件,这个插件会帮我们生成大部分的测试代码,从而减少我们的一个测试开发成本。

IntelliJ idea 需要安装的测试插件

在这里插入图片描述
当我们安装好这个插件后我们只需要选中我们想要测试的类——操作如下:

在这里插入图片描述
这里可以根据你们公司所规定的测试版本来,我这里用的是 JUnit5 和 Mockito

在这里插入图片描述

经过以上操作后,我们 ServiceImpl 中有几个方法,这个插件就会帮我们生成几个相对应的测试方法,当然这里我们还需要自己手动改一下

  • init()和 最下面那个方法是通用的,其方法根据自己的实际情况来测试就可以了。下面看不懂的注解可以去查一下主要是 Junit5 和 Mockito测试框架

3.1 Mockito的API介绍

3.2案例解析:

要测试的 DtMachineIncomeServiceImpl 实现类

@Service
public class DtMachineIncomeServiceImpl extends ServiceImpl<DtMachineIncomeMapper, DtMachineIncomeEntity> implements DtMachineIncomeService {
   
   

    @Autowired
    private DtMachineAddressIncomeDayService dtMachineAddressIncomeDayService;
    @Autowired
    private DtMachineInfoService dtMachineInfoService;

    @Override
    public BigDecimal profitByTeamsAndCurrency(List<Long> teamIds, String currencyMark) {
   
   
        DynamicTableParser.setId(currencyMark);
        List<DtMachineIncomeEntity> machineIncomeEntityList = this.list(Wrappers.lambdaQuery(DtMachineIncomeEntity.class)
                .in(DtMachineIncomeEntity::getOrganizationId, teamIds));
        return machineIncomeEntityList.parallelStream().map(DtMachineIncomeEntity::getActualTotalIncome).reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    @Override
    public DtMachineIncomeEntity getOneByOrganizationIdAndMachineId(Long organizationId, Long machineIdId) {
   
   
        return this.getOne(Wrappers.lambdaQuery(DtMachineIncomeEntity.class)
                .eq(DtMachineIncomeEntity::getOrganizationId, organizationId)
                .eq(DtMachineIncomeEntity::getMachineId, machineIdId)
                .last(MybatisPlusConst.LIMIT_1));
    }


    @Override
    public boolean saveDtMachineIncome(DtMachineIncomeEntity entity) {
   
   
        return this.save(entity);
    }

    @Override
    public boolean updateByDtMachineIncomeId(DtMachineIncomeEntity entity) {
   
   
        return this.updateById(entity);
    }

    @Override
    public List<DtMachineIncomeEntity> listByTeamId(Long teamId) {
   
   
        return this.list(Wrappers.lambdaQuery(DtMachineIncomeEntity.class)
                .eq(DtMachineIncomeEntity::getOrganizationId, teamId));
    }

    @Override
    public DtMachineIncomeEntity lastTimeByTeamIds(List<Long> teamIdsByUserId) {
   
   
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值