springboot+mybatis+mockito单元测试

springboot、mybatis这里不做详细介绍,重点介绍一下mockito是什么,以及怎么与springboot、mybatis集成。

mockito是什么?举个简单例子:当service层通过调用dao层接口获取数据,然后进行数据处理。在实际做单元测试时,dao层的数据是从数据库来的,我们想自己构造一些数据跑一下service层的业务逻辑,这个时候就需要将从数据库查询的时候替换为自己构造的数据,也就是service层调用的dao层接口返回的数据需要替换为自己构造的数据,那怎么替换呢?这个时候mockito就帮助我们实现了这一过程。mockito是通过模拟dao层接口调用,在运行service层业务逻辑时,将dao层调用返回的数据替换为自己构造的数据。

具体用法:

方法名描述
Mockito.mock(classToMock)模拟对象
Mockito.verify(mock)验证行为是否发生
Mockito.when(methodCall).thenReturn(value1).thenReturn(value2)触发时第一次返回value1,第n次都返回value2
Mockito.doThrow(toBeThrown).when(mock).[method]模拟抛出异常。
Mockito.mock(classToMock,defaultAnswer)使用默认Answer模拟对象
Mockito.when(methodCall).thenReturn(value)参数匹配
Mockito.doReturn(toBeReturned).when(mock).[method]参数匹配(直接执行不判断)
Mockito.when(methodCall).thenAnswer(answer))预期回调接口生成期望值
Mockito.doAnswer(answer).when(methodCall).[method]预期回调接口生成期望值(直接执行不判断)
Mockito.doNothing().when(mock).[method]不做任何返回
reset(mock)重置mock

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {

    @InjectMocks
    private UserHandleServiceImpl userHandleServiceImpl;

    @Mock
    private UserHandleDao userHandleDao

}

  • @Mock:创建一个Mock,模拟被调用对象
  • @InjectMocks:创建一个实例,其余用@Mock(或@Spy)注解创建的模拟对象将被注入到用该实例中。
  • @Autowird 等方式完成自动注入。在单元测试中,没有启动 spring 框架,此时就需要通过
    InjectMocks完成依赖注入。

注意点:实际调用方法传入的参数必须跟预先设定“假执行”的方法参数一致,否则不生效。
     * 如下:预先定义“假执行”userHandleDao.findUserListByCode("1001")的方法参数是1001,
     * 那么userHandleServiceImpl.findUserListByCode("1001")传入的但是也必须为1001

另一种情况:service层跟dao层方法参数实在做不到一致。
     *  如下:service层userHandleServiceImpl.findUserByParam("1004", "李四");
     *        dao层userHandleDao.findUserAll(Student);
     *   这种情况我们使用Mockito.isA(Student.class); 定义只有方法参数
     *   是类对象Student就行

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值