Mockito学习笔记
程序员文章站
2022-04-27 10:58:11
...
-
Mock
-
所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到两大目的:
-
验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等
-
指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作
-
-
Mockito 这个框架,这个是Java界使用最广泛的一个mock框架
-
-
Mockito 验证方法调用
-
使用步骤
-
创建一个mock对象
Object mock = Mockito.Mock(Object.class);
-
将该mock对象置入到待验证类中(mock出来的对象并不会自动替换掉正式代码里面的对象,必须要有某种方式把mock对象应用到正式代码里面)
Object.setMock(mock);
-
使用mockito进行验证
/** * objectToVerify mock对象 * methodToVerify 要验证的方法 * argumrnts 待验证方法的验证参数 * 验证该 mock 对象的 methodToVerify 方法被执行并且入参是 arguments */ Mockito.verify(objectToVerify).methodToVerify(arguments);
-
-
Mockito 方法记录
-
验证方法被执行次数
/** * objectToVerify mock对象 * methodToVerify 要验证的方法 * argumrnts 待验证方法的验证参数 * Mockito.times(num) 待验证方法被执行次数 * 验证该 mock 对象的 methodToVerify 方法被执行 num 次并且入参是 arguments */ Mockito.verify(objectToVerify,Mockito.times(num)).methodToVerify(arguments);
-
times(num) 被执行 num 次
-
atMost(num) 最多被执行 num 次
-
atLeast(num) 最少被执行 num 次
-
never() 从未被执行
-
-
methodToVerify 中 arguments 的 any 方法
-
验证方法参数固定类型
/** * objectToVerify mock对象 * methodToVerify 要验证的方法 * argumrnts 待验证方法的验证参数 * Mockito.anyString() 入参为任意字符串对象,支持 null * 验证该 mock 对象的 methodToVerify 方法被执行并且入参是 arguments */ Mockito.verify(objectToVerify).methodToVerify(Mockito.anyString());
-
类似 anyString ,还有 anyInt, anyLong, anyDouble 等等。 anyObject 表示任何对象, any(clazz) 表示任何属于clazz的对象。还有非常有意思也非常人性化的 anyCollection,anyCollectionOf(clazz), anyList(Map, set), anyListOf(clazz) 等等
-
-
-
-
Mockito 验证方法行为
-
指定mock对象的某个方法返回特定的值。
/** * mockObject mock对象 * targetMethod(args) 要拦截的方法,必须args匹配 * thenReturn 拦截后返回的内容为 desiredReturnValue */ Mockito.when(mockObject.targetMethod(args)).thenReturn(desiredReturnValue);
-
指定mock对象的一个方法执行特定的动作
/** * desiredAnswer 一个Answer对象,指定特定的动作 */ Mockito.doAnswer(desiredAnswer).when(mockObject).targetMethod(args);
-