<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.5.11</version>
<scope>test</scope>
</dependency>
mock的目的和作用: 模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开,类似于容器。
Mockito实现原理: 通过CGLib在运行时为每一个被mock的类或者对象动态生成一个代理对象,返回预先设计的结果。
Stub打桩: 即在Mockito中使用when().thenReturn()这种语法来定义对象方法和参数输入,并且制定结果输出
在测试类前注解 @RunWith(MockitoJUnitRunner.class)
在@Mock注解的对象后,以及@Test注解之前声明
@Before
public void setUp( ) throws Exception{
MockitoAnnotations.initMocks(this);
}
? mock对象的使用
Mockito.when(...).thenReturn(...); //打桩, 当when中的方法以及指定的输入执行时,会直接返回指定的内容,而其他被mock的方法以及其他输入都会直接返回默认值;
Mockito.when (...).thenCallRealMethod(... );
//此时会执行被Mock对象中的真实方法并且按照其实际执行返回结果
验证调用次数:
Mockito.verify(mockObject,Mockito.times()).methodName(anyString());
//验证methodName方法执行了多少次
验证调用顺序:
InOrder inOrder = Mockito.inOrder(mockObject);
inOrder.verify(mockObject).methodName();
inOrder.verify(mockObject).methodName();
局部模拟
通过Mockito.spy() 生成可局部模拟的对象,其余情况都保持真实情况,例如有一个类Hello,有
Hello spy=Mockito.spy(new Hello() ) //生成局部模拟对象
Mockito.when(spy.method2("sss")).thenReturn("gg"); //实际执行,但是返回的时候被替换了
assertEquals("gg", spy.method2("sss")); //模拟执行并返回
assertEquals("s2", spy.method2("s")); //按照真实情况执行并返回
并不执行方法,而是按照指定返回值返回
Mockito.doReturn(....).when(spy).method(....);
原文:https://www.cnblogs.com/zwwang/p/15084911.html