1. 概述

Mockito 是一个流行的Java单元测试Mock框架,用于接口和数据模拟。本文我们将快速介绍Mockito的基本使用,详细用法请查阅我们的Mockito系列教程。

2. 依赖安装

使用前需要在您的构建工具中引入 mockito-core 库,对于 Gradle 用户:

repositories { mavenCentral() }
dependencies { testImplementation "org.mockito:mockito-core:3.+" }

对于 Maven 用户:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-core</artifactId>
    <version>3.12.4</version>
    <scope>test</scope>
</dependency>

对于 Spring Boot 用户,spring-boot-starter-test 中已经集成好了Mockito,无需配置。

最新版本请前往 Maven 中央仓库查看。

3. 快速使用

import static org.mockito.Mockito.*;

// 创建mock对象 
// 你可以mock具体的类型,不仅只是接口
List mockedList = mock(List.class);
// 对于高版本Mockito 4.10.0+,可以写的更简洁
// List mockedList = mock();

// 下面添加测试桩(stubbing),指定mock的行为
// ”当“ 调用 mockedList.get(0) 返回 "first"
when(mockedList.get(0)).thenReturn("first");

// 下面代码将打印 "first"
System.out.println(mockedList.get(0));

// 下面将打印 "null",因为 get(999) 没有被打桩
System.out.println(mockedList.get(999));

上面示例,首先我们使用 Mockito 中的 mock 静态方法创建mock对象。或使用 @Mock 注解,详情参考我们的这篇文章

通过 when()/given() 指定mock行为。例如上面当调用 mockedList.get(0) 将返回 "first",这一过程专业术语叫做“打桩”(stubbing)。

除了 mock()/@Mock,还可使用 spy()/@Spy,两者区别是 spy 是部分mock,如果不打桩执行的是真实的方法

使用 @InjectMocks 注解实现依赖注入,自动将mock/spy对象注入到被测试对象中。详情参考我们的这篇文章

4. 总结

本本文我们简单介绍了Mockito的基本使用,进一步学习请前往我们的Mockito系列教程。