单元测试进阶Mockito

Mockito是一个流行的Java测试框架,用于创建mock对象并验证方法调用。本文详细介绍了Mockito的使用,包括创建mock对象、参数匹配器、验证方法调用次数、回调打桩、监视真实对象等功能,帮助开发者更好地进行单元测试。
摘要由CSDN通过智能技术生成

Mockito

简介

Mockito是一个java测试框架,它提供mock的创建,验证,打桩。
在单元测试中,可能会依赖外部资源,比如数据库、RPC接口等,mockito可以不真正依赖外部资源,模拟特定的返回结果,验证被测单元逻辑正确性。junit单元测试请看junit单元测试总结

使用场景

  • 提前创建测试
  • TDD(测试驱动开发)
  • 为无法访问的资源编写测试

打桩(Stub),翻译并不完全准确,stub表示,提前设置调用某个方法时会做出的反应。

使用

  1. 替换外部依赖
  2. 执行测试
  3. 验证测试代码是否正确执行

准备工作

maven依赖

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.4.0</version>
        <scope>test</scope>
    </dependency>

文档:mockito

创建mock对象

这是使用Mock的第一步,所有对原对象执行的操作都在Mock对象上执行,这里返回的对象是代理后的对象,并不是真实的List。

    List list=Mockito.mock(ArrayList.class);

验证mock对象是否执行了某些操作

    list.add(1);
    list.add(2);
    Mockito.verify(list).add(1);//验证通过
    Mockito.verify(list).add(5);//验证未通过,因为没有执行过该操作

打桩

打桩就是模拟一些函数调用的反应。

    Mockito.when(list.get(1)).thenReturn(3);
    Assert.assertEquals(list.get(1),3);
    Mockito.when(list.get(1)).thenReturn(4);
    Assert.assertEquals(list.get(1),4);
  • 默认情况下,对于有返回值的方法,Mock返回null,原始/原始包装器值或空集合。例如,对于int/Integer为0,对于boolean/Boolean为false。
  • 可以进行多次打桩,但是以最后一次为准。
  • 一次打桩,可多次调用

参数匹配器

    Mockito.when(list.get(Mockito.anyInt())).thenReturn("hi");//只要传入任何int,返回hi
    Assert.assertEquals("hi",list.get(1));//hi
    Assert.assertEquals("hi",list.get(999));//hi
    Mockito.when(list.contains(Mockito.isA(One.class))).thenReturn(true);//只要传入String类型,就返回hello
    Assert.assertTrue(list.contains("hello"));//hello
    Assert.assertTrue(list.contains(1));//发生错误
  • 参数匹配器是为了更加灵活的进行验证打桩,可以自定义

注意:如果在一个方法中使用参数匹配器,那么该方法的所有参数都要使用参数匹配器,验证和打桩都是如此,例如

    A a=Mockito.mock(A.class);
    //Mockito.when(a.add(Mockito.anyInt(),1)).thenReturn(2);//出错
    Mockito.when
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值