【学习笔记-使用Mockito编写单元测试】

Mockito是GitHub上使用最广泛的Mock框架,并与JUnit结合使用。
Mock是运行在服务端上的,Mock的作用就是模拟客户端的行为
区别在于Mock省去了网络请求的环节,提高了测试的效率
其次Mock是用编码实现的自动化的单元测试。

  • 使用到的注解
  1. @RunWith(MockitoJUnitRunner.class):测试类上的注解,启动注解
  2. @InjectMocks:将mock对象注入(直接使用其方法)
  3. @Mock :mock对象,打桩方法,返回打桩值。其余方法不调用,返回空(配合打桩方法语句一起使用)
  4. @Spy :mock对象,打桩方法,返回打桩值。其余方法调用真实方法
@RunWith(MockitoJUnitRunner.class)
@Slf4j
public class xxxTest {
    @InjectMocks
    private xxBizServiceImpl BizService;

    @Mock
    private xxService Service;

    @Before
    public void before(){
        MockitoAnnotations.initMocks(this);
    }
  • 打桩方法
  1. when…thenReturn 当调用指定方法时,返回指定结果
  2. doAnswer…when 配合InvocationOnMock 当调用指定方法时,动态获取参数和结果

对于打桩的特别解释:
mock 模拟 List(接口) 的对象,拥有 List(接口) 的所有方法和属性。when(xxxx).thenReturn(yyyy); 是指定当执行了这个方法的时候,返回 thenReturn 的值,相当于是对模拟对象的配置过程,为某些条件给定一个预期的返回值。

  • 验证方法
  1. Assert 判断逻辑
  2. Verify 验证是否调用某个方法(几次)
  • 实例对象的测试方式
@Test
    public void function_test(){
        final xxBO xxBo = default_BO();
        //Mock
        PowerMockito.when(xxService.selectByPrimaryKey(Mockito.anyLong())).thenReturn(xxBo);
        //Invoke
        xxBO funxxBo = xxBizService.selectByPrimaryKey(1L);
        //Verify
        Mockito.verify(xxService).selectByPrimaryKey(Mockito.anyLong());
        Assert.assertEquals("xx必须相等","在结果中取某一项预期值value",xxBo.getxx());
    }

如果在单元测试中经常会使用的POJO对象,可以进行统一示例,后面直接进行调用即可:

private xxBO default_BO() {
        xxBO xxBo = new xxBO ();
        xxBo .setxx();
        ...
        return xxBo;
    }

测试对象也可以传入json文件:

//Fill Data
        List<xxBO> default_list = JsonUtil.readJsonFileToList("json/xx/xx.json", xxBO.class);
        PageInfo<xxBO> xxPageInfo = new PageInfo<>(default_list );
        xxPageInfo .setTotal(default_list .size());

如果执行过程中遇到一些我们不关心的方法,但是需要依赖这些方法返回的结果,才能验证自己的代码逻辑。那么可以通过mock工具来返回结果。最后通过assert或者Verify来验证是否符合自己的想法

参考链接:
Mockito(1)
Mockito(2)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值