Mockito单元测试

单元测试使用的Mockito,详细使用可参考:

https://github.com/hehonghui/mockito-doc-zh

 项目引入mock

1.  添加依赖

<dependency>
<groupId>org.mockito</groupId>
<artifactId>m</artifactId>
<scope>test<scope>
</dependency>

2.  在需要添加测试用例的类上执行Ctrl+Shift+t,可以生成测试类,选择全部方法

3.  在测试类引入Mockito方法:   import static org.mockito.Mockito.*;

4.  类注解添加@RunWith(MockitoJUnitRunner.class)

5.  在生成的测试类上编写测试用例

案例

1.  调用第三方接口

when(xxxApi.XXX(any())).thenReturn("xxx")

2.  数据库交互

when(xxxDao.XXX(any())).thenReturn("xxx")

3.  数据库保存更新操作

doNothing().when(deptService).save(Mockito.any());

 4.  数据库查询,使用父类convert

when(XXXX.convert(Mockito.any(), Mockito.any())).thenReturn(xxx);

 5.  数据库查询是mock项目中的接口dao

when(xxxDao.findAll(Mockito.any(XXX.class), Mockito.any(XXX.class))).thenReturn("xxx")

6.  单元测试中EntityManager查询数据库

//在实现类中,会使用EntityManager的方法createNativeQuery()来对sql进行查询操作。

String executeSql = BASIC_SQL_PARAMS + sql;
Query nativeQuery = entityManager.createNativeQuery(executeSql);
NativeQueryImplementor<Map<String, Object>> nativeQueryImplementor = nativeQuery
        .unwrap(NativeQueryImpl.class)
        .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
List<Map<String, Object>> resultList = nativeQueryImplementor.getResultList();

//方法的入参是String类型的查询语句sql,返回值是接口Query ,所以需要mock一个Query的实现类,这里使用NativeQueryImpl 测试类中写法如下:

NativeQueryImpl<Map<String,Object>> queryMock = Mockito.mock(NativeQueryImpl.class);
when(entityManager.createNativeQuery(startsWith("select m"))).thenReturn(queryMock);
when(queryMock.unwrap(NativeQueryImpl.class)).thenReturn(queryMock);
when(queryMock.setResultTransformer(any())).thenReturn(queryMock);
when(queryMock.getResultList()).thenReturn(list);

常用语法介绍

1.when(userApi.trans("test1")).thenReturn("test1Suc");

解释:模拟uerApi.trans方法,入参为test1,返回参数为test1Suc。

2.when(deptDao.findById(Mockito.any())).thenReturn(Optional.of(d));

解释:模拟deptDao.findById入参为任意值,出参为d,d为返回对象。

当mock接口的时候Mockito.any()不可用,因为不能确定有多少实现。

3.doNothing().when(deptService).save(Mockito.any());

解释:当测试用例用碰到deptService.save方式时,不做任何处理。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值