透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
本篇的实例基于Maven
IDE (VS Code) 运行
在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行使用Mockito 注解 @ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。

- 不使用注解:
*** Copyright (C) Oscar Chen(XM):* * Date: 2024-12-07* Author: XM*/
package com.osxm.test.mock;import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.jupiter.api.Test;public class MockMethodTest {@Testpublic void objectMock() {List<String> mockedList = mock(List.class); // 创建一个List接口的mock对象when(mockedList.get(0)).thenReturn("first");mockedList.get(0);verify(mockedList).get(0); }
}
- 使用注解
//*** Copyright (C) Oscar Chen(XM):* * Date: 2024-12-01* Author: XM*/
package com.osxm.test.mock;import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;import java.util.List;import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;@ExtendWith(MockitoExtension.class)
public class MockitoUsageTest {@Mockprivate List<String> mockedList;@Testpublic void objectMock() {when(mockedList.get(0)).thenReturn("first");mockedList.get(0);verify(mockedList).get(0); }
}
如果需要调试模式可以右键单击按钮,在弹出菜单选择Debug Test

mvn test 命令行运行的问题
但是在命令行使用 mvn test 命令运行的时候, 却出现了比较奇怪的现象:
- 普通的JUnit 测试类和方法能正常运行
- 使用Mockito 的测试类能找到,但是测试方法找不到,如下图所示:

为什么呢? 这里首先要介绍一下 Maven的插件 maven-surefire-plugin。
maven-surefire-plugin
maven-surefire-plugin是Maven的一个插件,主要用于执行Java应用程序中的单元测试。
主要功能包括:
- 执行单元测试:maven-surefire-plugin可以自动发现并执行项目中的测试类。它默认使用JUnit来执行测试,但也可以配置为支持其他测试框架,如TestNG。
- 报告生成:该插件提供详细的测试结果报告,包括测试用例的数量、成功/失败/忽略的数量等,这些报告通常以纯文本(.txt)和XML(.xml)格式生成,并保存在项目的target/surefire-reports目录下。
- 定制测试执行:maven-surefire-plugin允许用户通过配置来定制测试的执行方式,例如指定特定的测试类或方法进行执行,或者排除某些测试类或方法。
mvn test 运行Mockito 测试的解法
在pom.xml 中添加maven-surefire-plugin 插件:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.5.2</version></plugin></plugins></build>
再次运行就可以找到Mockito 编写的测试类了。

问题
那么,问题来了:
- 为什么VS Code不添加maven-surefire-plugin可以运行单元测试?
- 为什么在不添加maven-surefire-plugin的状况下,普通的单元测试可以找到并运行,Mockito 的不行了呢?
接下来就解惑这两个问题
### 为什么VS Code不添加maven-surefire-plugin可以运行单元测试?
在IDE中导入Maven项目时,IDE通常会自动读取pom.xml文件,并根据其中的配置来设置项目的构建和测试环境。如果pom.xml中没有显式配置maven-surefire-plugin,IDE可能会使用Maven的默认行为来执行测试。
另外, IDE通常还提供了测试运行器功能,允许用户直接运行和调试测试类。这些测试运行器可以与Maven的测试框架集成,从而在不依赖maven-surefire-plugin的情况下执行测试。
所以,对于IDE ,可以不依赖pom.xml 的maven-surefire-plugin 就可以运行测试
为什么在不添加maven-surefire-plugin的状况下,普通的单元测试可以找到并运行,Mockito 的不行了呢?
稍微细心一点就可以看到在显式添加maven-surefire-plugin 的前后的差异:

在pom.xml 显式添加maven-surefire-plugin 之前,使用mvn test 命令其实也使用了maven-surefire-plugin,只是版本比较低 ,是2.12.4 版。
这个原意就是 Maven内置了一个版本的maven-surefire-plugin,即使项目没有配置,也可以使用这个版本来运行单元测试,但是这里的状况,这个版本相对于Mockito 的版本来说,低了, 所以找不到Mockito 的测试。通过添加新版本的
maven-surefire-plugin 就可以解决这个问题。
相关文章:
透彻理解并解决Mockito模拟框架的单元测试无法运行的问题
本篇的实例基于Maven IDE (VS Code) 运行 在VS Code 运行的时候, 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮,单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…...
vue3字典数据的显示问题(使用hooks解决)
我们在使用 element-plus的时候,经常会使用一些字典数据, 在搜索框的时候,字典数数要使用 el-select el-option 来显示,当在table表格的时候,我们通常记录的是 字典数据的id , 又要把它改变成 字典数据的 name 属性 因…...
Elasticsearch 单节点安全配置与用户认证
Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节…...
二分查找(带图详解)
优选算法系列 文章目录 优选算法系列前言一、二分查找的思想二、算法使用小总结 三、代码实现四、二分查找拓展4.1、查找第一次出现的target小总结 4.2、target最后出现的位置小总结 五、代码总结 前言 在这篇博客中,我会给大家分享二分查找及其扩展。 这是链接-&…...
【Git】:标签管理
目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…...
物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉
0. 要实现的效果 让树莓派可以识别身边的一些物品,比如电脑,鼠标,键盘,杯子,行李箱,双肩包,床,椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...
单片机软件工程师前景分析
单片机软件工程师的前景在2024年看起来是积极的。随着物联网(IoT)、自动化、智能设备等领域的快速发展,对于能够开发基于单片机(MCU)如STM32、ARM、51等嵌入式系统的软件工程师需求持续增长。这些工程师负责设计和实现…...
在Java中几种常用数据压缩算法的实现及其优劣势
在Java中几种常用数据压缩算法的实现及其优劣势 背景:项目需要引入Redis作为缓存组件,需要考虑到Redis的内存占用(机器内存越大,成本越高),因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...
Word——如何打出 符号中的 1、2、3等带圆圈的序号
一、方式1 1.1:点击 插入-符号 1.2:字体 选择 Wingdings 或者 Wingdings 2 二、方式2 带1的圈:输入 2460,然后按 AItX 带2的圈:输入 2461,然后按 AItX 带3的圈:输入 2462,然后按 …...
操作系统之进程与线程
进程 定义: 进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。 组成: 包括程序代码、程序处理的数据、程序计数器、一组寄存器的值以及系统资源(如打开的文件)等。 …...
代码随想录算法训练营打卡第35天:背包问题
前言 zaccheo打卡代码随想录第35天 由于这段时间工作太忙了(加上我的懒病犯了)导致迟打卡了好几天555555.。。。 今天的主要是动态规划中的背包问题,这个真的是蛮难理解的,我把我自己强行按在椅子上半个小时一点一点的看卡哥文章…...
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
💯 欢迎光临清流君的博客小天地,这里是我分享技术与心得的温馨角落 💯 🔥 个人主页:【清流君】🔥 📚 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 📚 🌟始终保持好奇心&…...
vscode(一)安装(ubuntu20.04)
1、更新软件包列表 sudo apt update2、安装依赖包 sudo apt install software-properties-common apt-transport-https wget3、导入Microsoft GPG密钥 wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -4、向系统添加VSCode存储库 sudo…...
利用永恒之蓝对win7进行键盘记录
打开kali中的msfconsole 找到永恒之蓝,设置靶机ip,后可以exploit,也可以run 连接成功 查看进程,选择监听靶机win7上的cmd.exe进程 当前进程不是1484,需要迁移到1484 cmd.exe,进程迁移 键盘监听,…...
万字长文解读深度学习——dVAE(DALL·E的核心部件)
🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总 万字长…...
RL仿真库pybullet
1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口,主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型,例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法,提供了大量的强化学…...
file_get_contents函数导致网站卡死响应超时
宝塔控制面板系统下运行包含file_get_contents函数的php文件时候,发生以下报错: PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed: 解决方法: 一:需要检查请求的远程主机是否在本机的/etc/host…...
如何使用C#与SQL Server数据库进行交互
一.创建数据库 用VS 创建数据库的步骤: 1.打开vs,创建一个新项目,分别在搜素框中选择C#、Windows、桌面,然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”,右键单击“数据连接”࿰…...
#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(上)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
vue3 项目搭建-9-通过 router 在跳转页面时传参
第一步,在跳转链接处挂载方法,将要传输的数据传入: <a href"#" click.prevent"goToArticle(obj.id)" class"click"><h1>{{obj.title}}</h1><p>作者:{{obj.author}}</p&…...
别再手动调参了!用Simulink系统辨识工具箱,5分钟搞定Buck电路的PID控制器设计
电力电子工程师的效率革命:用Simulink系统辨识工具箱5步完成Buck电路PID设计 在电力电子领域,Buck电路作为最基础的DC-DC降压拓扑,其控制器设计一直是工程师的必修课。传统的手工计算和试错调参方法不仅耗时费力,还难以达到理想的…...
开源机器人夹爪任务控制台:架构设计与工程实践全解析
1. 项目概述:从“OpenClaw 任务控制”看开源机器人控制台的演进最近在机器人开发社区里,一个名为abhi1693/openclaw-mission-control的项目引起了我的注意。乍一看这个标题,你可能会联想到科幻电影里那些布满屏幕、控制着庞大机械臂的指挥中心…...
从LED灯珠到手机屏幕:一文搞懂色温、显色指数(CRI)怎么选,告别‘卖家秀’惨案
从LED灯珠到手机屏幕:色温与显色指数的科学选购指南 深夜伏案工作时,你是否总觉得眼睛干涩疲劳?网购衣物到手后颜色总与屏幕显示相差甚远?餐厅美食拍出来总是暗淡无光?这些困扰的根源往往在于——光源质量。当我们面对…...
避坑指南:连接UR5实体机械臂与ROS MoveIt时,你最容易忽略的这3个配置细节
避坑指南:连接UR5实体机械臂与ROS MoveIt时,你最容易忽略的这3个配置细节 当仿真环境中的UR5机械臂完美运行MoveIt规划路径,却在切换到实体设备时遭遇连接失败,这种落差感往往源于几个隐蔽的配置陷阱。本文将从工业现场调试经验出…...
【限时技术白皮书】ElevenLabs藏文模型权重结构首度曝光:Transformer Decoder层中Tibetan Syllable Tokenization模块详解
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs藏文语音生成技术全景概览 ElevenLabs 作为全球领先的文本到语音(TTS)平台,目前尚未官方支持藏文(བོད་སྐད་)语音合成。其公…...
分享一些常见的SQL计算面试题
代码都是基于mysql实现,如果小伙伴们有其他的思路欢迎留言~ 1.行列转换2.分组求top-n3.连续登录问题(包括日期可间断和不可间断)4.找连续出现3次及以上的数字5.直播间同时在线人数统计1.行列转换 表tb1: 表tb2: 行转…...
[实战] 2026年CNC加工质量控制:从工程图纸数字化到检验计划生成的全流程解析
在 2026 年的精密制造环境中,cnc 加工(CNC machining)已不再仅仅是切削工艺的竞争,更是数字化协作与质量控制能力的较量。随着多品种、小批量生产模式成为主流,如何快速解析复杂的工程图纸并制定高精度的检验计划&…...
Excalidraw架构图AI分析:基于MCP协议实现草图智能解析与转换
1. 项目概述:当白板工具遇上AI架构师 如果你和我一样,经常在白板上画架构图、流程图,然后花大量时间整理成规范的文档,那你一定会对这个项目感兴趣。 excalidraw-architect-mcp 不是一个独立的应用,而是一个 MCP&a…...
基于容器化与微服务架构的无限路由器:云原生网络控制平台实践
1. 项目概述:一个“无限”路由器的诞生最近在折腾家庭网络和边缘计算项目时,我遇到了一个经典难题:如何在资源受限的硬件上,实现一个功能强大、可扩展且易于管理的网络路由与策略中心?市面上的成品路由器固件ÿ…...
暗黑破坏神2角色编辑器终极指南:如何轻松打造完美角色
暗黑破坏神2角色编辑器终极指南:如何轻松打造完美角色 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中无尽的刷装备、练级而烦恼吗?Diablo Edit2是一款…...
