Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Freemarker模板使用
  • Java项目通过Log4j将日志发送到Kafka
  • Java Maven中自动代码检查插件
  • Protobuf详细介绍
  • 提升开发效率:JCommander高效Java命令行参数解析利器
  • 36k Star!Arthas Java开发者的故障排查利器
  • 高级单元测试中的 Mockito 使用指南
    • Mockito 的主要特点
    • Mockito 的使用方法介绍
      • 基本使用方法
      • 1. 添加依赖
      • 2. 创建模拟对象
      • 3. 定义行为
      • 4. 验证交互
      • 5. 使用注解
      • 6. 存根连续调用
      • 7. 存根异常
      • 8. 验证行为的次数
      • 高级使用方法
      • 1. 使用 Answer 自定义返回值
      • 2. 使用 Captor 捕获参数
      • 3. 使用 InOrder 验证顺序
      • 4. 使用 Spy 部分模拟
  • Java代码覆盖率工具
  • Jar包源码修改
  • 《Java技术文档》
Jast-zsh
2024-11-06
目录

高级单元测试中的 Mockito 使用指南

# 高级单元测试中的 Mockito 使用指南

Mockito 是一个在 Java 中广泛使用的模拟(Mocking)框架。它允许开发者在单元测试中创建和配置模拟对象,这些模拟对象可以有效替代实际对象,以便更准确地模拟真实对象的行为,从而提升测试的效率与准确性。本文将详细探讨 Mockito 的主要特点与使用方法,并提供相关代码示例以帮助理解。

官方文档:https://site.mockito.org/

# Mockito 的主要特点

  1. 简洁的 API
    Mockito 提供了清晰且易于理解的 API,使用者能够快速上手并创建模拟对象,减少了学习曲线。

  2. 验证行为
    使用 Mockito,开发者可以精确验证模拟对象的方法是否被调用,以及调用方式,包括参数的数量和顺序。这为确保代码的正确性提供了极大的便利。

  3. 灵活的存根配置
    Mockito 允许用户为模拟对象的方法设置不同的返回值或特定行为,以灵活适应不同的测试需求,并能够模拟复杂的业务逻辑。

  4. 支持多种测试场景
    无论是测试 void 方法、异常抛出,还是复杂的连续调用,Mockito 都能够高效处理,拓展了测试的覆盖范围。

  5. 与其他测试框架集成
    Mockito 可以无缝集成 JUnit、TestNG 等流行的测试框架,使得用户能够在现有的测试环境中使用 Mockito 的丰富功能。

# Mockito 的使用方法介绍

# 基本使用方法

# 1. 添加依赖

在使用 Mockito 之前,首先需要在项目中添加相应的依赖。如果你使用 Maven,可以在 pom.xml 中添加以下依赖项:

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>${mockito.version}</version>
    <scope>test</scope>
</dependency>
1
2
3
4
5
6

如果你使用 Gradle,则在 build.gradle 中添加:

testImplementation 'org.mockito:mockito-junit-jupiter:${mockito.version}'
1

# 2. 创建模拟对象

使用 Mockito.mock() 方法创建模拟对象。如下所示:

List<String> mockedList = Mockito.mock(List.class);
1

# 3. 定义行为

利用 when() 和 thenReturn() 方法为模拟对象的方法定义特定的返回行为:

when(mockedList.size()).thenReturn(100);
1

# 4. 验证交互

使用 verify() 方法验证模拟对象的方法是否被调用。例如:

verify(mockedList).add("one");
1

# 5. 使用注解

Mockito 同样支持注解来简化创建模拟对象的过程。在 JUnit 测试类中,可以使用 @Mock 注解来创建模拟对象:

@RunWith(MockitoJUnitRunner.class)
public class MyTest {
    @Mock
    private List<String> mockedList;
    // …
}
1
2
3
4
5
6

# 6. 存根连续调用

可以使用 thenReturn() 方法进行连续调用的返回值设置。例如:

Mockito.when(mockedList.get(0)).thenReturn("first").thenReturn("second");
1

# 7. 存根异常

使用 thenThrow() 方法设置当调用模拟对象的方法时抛出异常:

Mockito.when(mockedList.get(anyInt())).thenThrow(new RuntimeException("Error!"));
1

# 8. 验证行为的次数

使用 times()、atLeastOnce() 和 never() 等方法来验证模拟对象的方法被调用的次数。例如:

Mockito.verify(mockedList, times(3)).add(anyString());
1

# 高级使用方法

# 1. 使用 Answer 自定义返回值

可以通过实现 Answer 接口来自定义模拟对象方法的返回值,提供更多灵活性:

Mockito.when(mockedList.get(anyInt())).thenAnswer(new Answer<String>() {
    public String answer(InvocationOnMock invocation) throws Throwable {
        return "custom answer";
    }
});
1
2
3
4
5

# 2. 使用 Captor 捕获参数

使用 ArgumentCaptor 捕获模拟对象方法的参数,以实现进一步的验证或处理:

ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
Mockito.verify(mockedList).add(argument.capture());
assertEquals("expectedValue", argument.getValue());
1
2
3

# 3. 使用 InOrder 验证顺序

使用 InOrder 来验证多个方法调用的顺序,以确保逻辑的正确性:

InOrder inOrder = Mockito.inOrder(mockedList);
inOrder.verify(mockedList).method1();
inOrder.verify(mockedList).method2();
1
2
3

# 4. 使用 Spy 部分模拟

可以使用 spy() 方法创建一个部分模拟对象,部分方法被模拟,其余方法仍然保留原有实现:

List<String> spyList = Mockito.spy(new ArrayList<String>());
Mockito.when(spyList.size()).thenReturn(100);
1
2

Mockito 是一个强大且灵活的模拟框架,它能够更加方便开发者来进行某些测试场景。

上次更新: 2024/11/09, 21:00:16
36k Star!Arthas Java开发者的故障排查利器
Java代码覆盖率工具

← 36k Star!Arthas Java开发者的故障排查利器 Java代码覆盖率工具→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式