作用:测试过程中获取一些不易获取的对象
1.被测对象依赖的对象构造复杂
对class A 进行单元测试,需要构造大量的classB,C,D等依赖对象,他们的构造复杂(构造步骤多,时间长), 这时我们可以利用mock去构造虚拟的classB,C,D
2.被测单元依赖的模块尚未开发完成,而被测对象需要依赖模块的返回值进行测试
for example:
--service层的代码中,包含对dao层的调用,但dao层代码尚未开发完成
使用时机:
只测试对象的内部逻辑的质量,不关心依赖对象的逻辑正确性和稳定性
Local Mock:对本地依赖对象的mock
EasyMock/Mockito
Mockito:
maven: <dependency>
<groupId>org.mockito </groupId>
<artifactId>mockito-core</artifactId>
<version>2.7.12</version>
<scope>test</scope>
</dependency>
导入包 import static org.mockito.Mockito.*;
特性:
1.验证行为是否调用过
Demo demo = mock(Demo.class);
demo.test();
verify(demo).test();//验证成功
2.验证方法被调用的情况
(1)调用了特定次数 verify(demo, times(2)).test();//demo的test是否被调用两次
(2)至少x次 verify(demo, atLeastOnce()).test();//demo的test至少调用一次
(3)最多x次 verify(demo, atMost(2)).test();//test最多被调用2次
(4)从未被调用 verify(demo, never()).test();
3.插桩
使mock对象的的方法返回期望的返回值:when(a.b()).thenReturn();
抛出期望的异常:doThorw(new Exception()).when(Demo).test();
4.参数匹配
使用arguments metcher(参数匹配)
任意整数:anyInt() 任意字符串:anyString() ...
@Mock:mockito.mock()的缩写
@MockBean:将mock对象添加到spring上下文中,替换spring中任何相同类型的bean,如果没有相同类型的bean将添加一个新的bean
1万+

被折叠的 条评论
为什么被折叠?



