Mockito单元测试学习

因为工作需要,初步学了了下使用Mockito编写单元测试,现将学习笔记做个记录,加深下记忆。

做一个Facade层的单元测试,对FacilitatorSiteRelationConfigFacadeImpl 的insertFacilitatorSiteRelationConfig方法 编写测试用例代码。

方法代码如下:

 最终测试代码如下:

第一步:

1、测试类命名

根据个人喜好,此处命名为 FacilitatorSiteRelationConfigFacadeImplMockitoTest

2、增加用例运行容器

增加注解用例运行的容器,(@RunWith(MockitoJUnitRunner.class)

mockito一个优势就是不依赖spring容器,所以运行时不需要加载spring容器依赖的jar和配置,所以效率会提升

第二步:

1、配置测试依赖

因为没有用spring容器,所以autowire无法生效,@InjectMocks 创建一个实例,其他的@Mock注解会注入到该实例中

@InjectMocks
    private FacilitatorSiteRelationConfigFacade facilitatorSiteRelationConfigFacade = new FacilitatorSiteRelationConfigFacadeImpl();

 

待测试方法内依赖两个service,创建两个service的Mock对象

 @Mock
    private OdsAreaService odsAreaService;
    
    @Mock
    private FacilitatorSiteRelationConfigService facilitatorSiteRelationConfigService;

2、编写待测试方法

 @Test
    public void insertFacilitatorSiteRelationConfigTest() {
     }

第三步:

测试逻辑实现

List<FacilitatorSiteRelationConfig> list =null;
        Mockito.when(facilitatorSiteRelationConfigService.listFacilitatorSiteRelationConfigByProperty(Mockito.any())).thenReturn(list);
        Integer insertCount =1;
        Mockito.when(facilitatorSiteRelationConfigService.insertFacilitatorSiteRelationConfig(Mockito.any())).thenReturn(insertCount);
        Integer updateCount = 1;
        Mockito.when(odsAreaService.updateArea(Mockito.any())).thenReturn(updateCount);
        OdsArea odsArea = new OdsArea();
        odsArea.setOdsAreaId(111);
        Mockito.when(odsAreaService.queryOdsArea(Mockito.any())).thenReturn(odsArea);
        resultModel = facilitatorSiteRelationConfigFacade.insertFacilitatorSiteRelationConfig(record);

因为是成功用例,所以对facilitatorSiteRelationConfigService、odsAreaService的依赖都定义返回成功时预期结果,

定义list 为facilitatorSiteRelationConfigService.listFacilitatorSiteRelationConfigByProperty() 的预期mock结果,

定义 insertCount 为 facilitatorSiteRelationConfigService.insertFacilitatorSiteRelationConfig()的预期mock结果,

定义 updateCount 为odsAreaService.updateArea() 的 预期mock结果,

定义 odsArea 为 odsAreaService.queryOdsArea() 的预期mock结果,

定义方法  Mockito.when(方法(方法参数)).thenReturn(结果).

 

第四步:

执行

初步学习,使用还是比较简单。个人总结与junit的差别:

1、运行容器不同,junit依赖spring容器,mockito依赖自身容器 各有优点和缺点 junit启动时间长,因为依赖项较多,对应的启动时加载较多,但是会在启动时对项目做校验如方法有依赖配置或者其他规范性错误,容器会校验出来。mockito依赖少,启动时间端,mock掉的依赖如果有问题,在此处无法发现。

2、单元测试覆盖粒度差异,mock覆盖掉依赖,所以无法测试依赖项是否正常,如果有需求,需要再对依赖项编写mock测试用例。junit能够对整个方法的流程做测试,从代码到依赖数据库,脚本正确性做测试。

3、junit 依赖数据库数据,操作中如果不加事务,并进行事务回滚,会更改数据库数据,原来运行正常的用例如果数据库中数据被修改,则可能导致用例运行失败;mock测试不依赖数据库,不会操作到数据库数据。

4、junit对于功能测试比较全面,mock测试对于单元测试覆盖率的达标比较有优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值