书接上回:https://blog.csdn.net/qq_36110736/article/details/107924618
spy与mock的区别
@Mock
- 对该对象所有非私有方法的调用都没有调用真实方法
- 对该对象私有方法的调用无法进行模拟,会调用真实方法
@Spy
- 对该对象所有方法的调用都直接调用真实方法
实际使用:
有两种形式可以实现Spy,
- 调用spy方法
- @Spy注解
此处使用的就是注解(被注释掉的就是正常调用方法的形式),两种方式是等价的。
package com.example.demo.spy;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import java.util.ArrayList;
import java.util.List;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
public class SpyTest {
// List<String> realList = new ArrayList<>();
//List<String>list = spy(realList);
@Spy
List<String> list = new ArrayList<>();
@Before
public void before(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testSpy(){
list.add("first");
list.add("second");
System.out.println(list.get(0));
System.out.println(list.get(1));
System.out.println(list.isEmpty());
System.out.println("=====我是分割线=====");
when(list.isEmpty()).thenReturn(true);
when(list.size()).thenReturn(0);
System.out.println(list.isEmpty());
System.out.println(list.size());
}
}
运行结果:
参考:
https://www.jianshu.com/p/c28452d1bd02
https://www.bilibili.com/video/BV1jJ411A7Sv?p=6