1. Mockito简介
- 官网
https://site.mockito.org/
1.1 添加依赖
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.9.0</version>
<scope>test</scope>
</dependency>
一般用 mockito-core
就足够,最简单的方式是 mockito-all
1.2 常用 Mockito 方法
方法名 | 描述 |
---|---|
Mockito.mock(classToMock) | 模拟对象 |
Mockito.mock(classToMock,defaultAnswer) | |
Mockito.verify(mock) | 验证行为是否发生 |
reset(mock) |
1.3 设置返回值
设置对象调用的预期返回值
语法 when(...).thenReturn(value)
对象调用时抛出的异常
语法 when(...).thenThrow(new RuntimeException)
1.4 常用注解
注解 | 描述 |
---|---|
@Mock | 注入实例 |
@InjectMocks |
2. 实战
2.1 方式一:通过 Mockito.mock() 来创建 Mock 对象
public class MockDemo {
@Test
public void demo() {
List<String> mockList = Mockito.mock(ArrayList.class);
}
}
2.2 方式二: 使用注解 @Mock
使用 @Mock 注解时,需要在单元测试类上加上 @ExtendWith(MockitoExtension.class) 或 MockitoAnnotations.initMocks(this)
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class MockTest {
@InjectMocks
private OrderDao orderDao;
@Test
public void test() {
String query = orderDao.query();
}
}
使用 MockitoAnnotations.initMocks(this)
public class MockTest {
@InjectMocks
private OrderDao orderDao;
@BeforeEach
public void setUp() {
// MockitoAnnotations.initMocks(this);
MockitoAnnotations.openMocks(this);
}
@Test
public void test() {
String query = orderDao.query();
}
}
3. 解决多级依赖树
写单元测试时,若要测试的类有很多依赖,这些依赖的类/对象/资源又会有别的依赖,从而形成一个大的依赖树,要在单元测试的环境中完整地构建这样的依赖,是一件很困难的事情
@ExtendWith(MockitoExtension.class)
public class MockTest {
@InjectMocks
private OrderServiceImpl orderService;
@Mock
private OrderDao orderDao;
@Test
public void test() {
Mockito.when(orderDao.query()).thenReturn("return_success");
String query = orderService.query();
System.out.println(query);
}
}
网友评论