当前位置: 首页 > news >正文

透彻理解并解决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应用程序中的单元测试。

主要功能包括:

  1. 执行单元测试:maven-surefire-plugin可以自动发现并执行项目中的测试类。它默认使用JUnit来执行测试,但也可以配置为支持其他测试框架,如TestNG。
  2. 报告生成:该插件提供详细的测试结果报告,包括测试用例的数量、成功/失败/忽略的数量等,这些报告通常以纯文本(.txt)和XML(.xml)格式生成,并保存在项目的target/surefire-reports目录下。
  3. 定制测试执行: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 编写的测试类了。

在这里插入图片描述

问题

那么,问题来了:

  1. 为什么VS Code不添加maven-surefire-plugin可以运行单元测试?
  2. 为什么在不添加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 运行的时候&#xff0c; 不需要在pom.xml 中添加任何插件就可以在测试类中看到如下的绿色按钮&#xff0c;单击就可以运行使用Mockito 注解 ExtendWith(MockitoExtension.class) 或是 Mockito 代码方式的测试。 不使用注…...

vue3字典数据的显示问题(使用hooks解决)

我们在使用 element-plus的时候&#xff0c;经常会使用一些字典数据&#xff0c; 在搜索框的时候&#xff0c;字典数数要使用 el-select el-option 来显示&#xff0c;当在table表格的时候&#xff0c;我们通常记录的是 字典数据的id , 又要把它改变成 字典数据的 name 属性 因…...

Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证 安全扫描时发现了一个高危漏洞&#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时&#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤&#xff0c;为单节…...

二分查找(带图详解)

优选算法系列 文章目录 优选算法系列前言一、二分查找的思想二、算法使用小总结 三、代码实现四、二分查找拓展4.1、查找第一次出现的target小总结 4.2、target最后出现的位置小总结 五、代码总结 前言 在这篇博客中&#xff0c;我会给大家分享二分查找及其扩展。 这是链接-&…...

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本&#xff1a;标签 tag &#xff0c;可以简单的理解为是对某次 commit 的⼀个标识&#xff0c;相当于起了⼀个别名。例如&#xff0c;在项目发布某个版本的时候&#xff0c;针对最后⼀次 commit 起⼀个 v1.0 这样…...

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...

单片机软件工程师前景分析

单片机软件工程师的前景在2024年看起来是积极的。随着物联网&#xff08;IoT&#xff09;、自动化、智能设备等领域的快速发展&#xff0c;对于能够开发基于单片机&#xff08;MCU&#xff09;如STM32、ARM、51等嵌入式系统的软件工程师需求持续增长。这些工程师负责设计和实现…...

在Java中几种常用数据压缩算法的实现及其优劣势

在Java中几种常用数据压缩算法的实现及其优劣势 背景&#xff1a;项目需要引入Redis作为缓存组件&#xff0c;需要考虑到Redis的内存占用&#xff08;机器内存越大&#xff0c;成本越高&#xff09;&#xff0c;因此需要引入数据压缩。 1、介绍 数据压缩是计算机领域中一项重要…...

Word——如何打出 符号中的 1、2、3等带圆圈的序号

一、方式1 1.1&#xff1a;点击 插入-符号 1.2&#xff1a;字体 选择 Wingdings 或者 Wingdings 2 二、方式2 带1的圈&#xff1a;输入 2460&#xff0c;然后按 AItX 带2的圈&#xff1a;输入 2461&#xff0c;然后按 AItX 带3的圈&#xff1a;输入 2462&#xff0c;然后按 …...

操作系统之进程与线程

进程 定义&#xff1a; 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的独立单位。 组成&#xff1a; 包括程序代码、程序处理的数据、程序计数器、一组寄存器的值以及系统资源&#xff08;如打开的文件&#xff09;等。 …...

代码随想录算法训练营打卡第35天:背包问题

前言 zaccheo打卡代码随想录第35天 由于这段时间工作太忙了&#xff08;加上我的懒病犯了&#xff09;导致迟打卡了好几天555555.。。。 今天的主要是动态规划中的背包问题&#xff0c;这个真的是蛮难理解的&#xff0c;我把我自己强行按在椅子上半个小时一点一点的看卡哥文章…...

【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…...

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 找到永恒之蓝&#xff0c;设置靶机ip&#xff0c;后可以exploit&#xff0c;也可以run 连接成功 查看进程&#xff0c;选择监听靶机win7上的cmd.exe进程 当前进程不是1484&#xff0c;需要迁移到1484 cmd.exe&#xff0c;进程迁移 键盘监听&#xff0c;…...

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…...

RL仿真库pybullet

1. 介绍 PyBullet是一个基于Bullet Physics引擎的物理仿真Python接口&#xff0c;主要用于机器人仿真模拟。 1.1 主要特点 提供大量预设的机器人模型&#xff0c;例如URDF(统一机器人描述格式)、SDF、MJCF 格式。适用于训练和评估强化学习算法&#xff0c;提供了大量的强化学…...

file_get_contents函数导致网站卡死响应超时

宝塔控制面板系统下运行包含file_get_contents函数的php文件时候&#xff0c;发生以下报错&#xff1a; PHP Warning: file_get_contents():php_network_getaddresses: getaddrinfo failed: 解决方法&#xff1a; 一&#xff1a;需要检查请求的远程主机是否在本机的/etc/host…...

如何使用C#与SQL Server数据库进行交互

一.创建数据库 用VS 创建数据库的步骤&#xff1a; 1.打开vs&#xff0c;创建一个新项目&#xff0c;分别在搜素框中选择C#、Windows、桌面&#xff0c;然后选择Windows窗体应用(.NET Framework) 2.打开“视图-服务器资源管理器”&#xff0c;右键单击“数据连接”&#xff0…...

#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit(5)进阶模式-MITM中间人代理与劫持(上)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

vue3 项目搭建-9-通过 router 在跳转页面时传参

第一步&#xff0c;在跳转链接处挂载方法&#xff0c;将要传输的数据传入&#xff1a; <a href"#" click.prevent"goToArticle(obj.id)" class"click"><h1>{{obj.title}}</h1><p>作者&#xff1a;{{obj.author}}</p&…...

Java、python标识符命名规范

Java 包名所有字母一律小写。例如cn.com.test类名和接口名每个单词的首字母都要大写。例如ArrayList、Iterator常量名所有字母都大写&#xff0c;单词之间用下划线连接&#xff0c;例如&#xff1a;DAY_OF_MONTH变量名和方法名的第一个单词首字母小写&#xff0c;从第二个单词…...

高效职场人

文章目录 1.时间效能 ABCD2.高效员工的习惯之 自我掌控的秘诀3.学会做主4.学会互赢5.学会沟通、学会聆听6.学会可持续发展&#xff1a;四个方面更新自我(1)更新身体(2)更新精神(3)更新智力(4)更新人际情感 1.时间效能 ABCD 时间四象限&#xff1a; A类任务&#xff1a;重要且紧…...

深入探索现代 IT 技术:从云计算到人工智能的全面解析

目录 1. 云计算&#xff1a;重塑 IT 基础设施 2. 大数据&#xff1a;挖掘信息的价值 3. 物联网&#xff08;IoT&#xff09;&#xff1a;连接物理世界 4. 区块链&#xff1a;重塑信任机制 5. 人工智能&#xff08;AI&#xff09;&#xff1a;智能未来的驱动力 结语 在当今…...

【AI学习】苹果技术报告《Apple Intelligence Foundation Language Models》

文章地址&#xff1a;https://machinelearning.apple.com/papers/apple_intelligence_foundation_language_models.pdf 这篇文章介绍了苹果公司开发的基础语言模型&#xff08;Apple Foundation Language Models&#xff0c;简称AFM&#xff09;&#xff0c;这些模型旨在为苹果…...

深度相机获取实时图像总结

问题详情&#xff1a;之前一直把曝光调整到50000&#xff0c;画面一直很流畅&#xff0c;知道领导要求将曝光改成500000时整个程序卡死了 问题解决&#xff1a; 首先怀疑是帧率太低的原因&#xff0c;控制变量后发现不是帧率的问题&#xff0c;看着代码很迷茫&#xff0c;领导…...

Nginx限流实践-limit_req和limit_conn的使用说明

注意&#xff1a; 本文内容于 2024-12-07 19:38:40 创建&#xff0c;可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容&#xff0c;请访问原文地址&#xff1a;Nginx限流实践。感谢您的关注与支持&#xff01; 一、限流 之前我有记录通过CentOS7定时任务实…...

Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?

旧版源代码地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 旧版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;当你动态地更改物体的Mesh时&#xff0c;通常期望…...

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景&#xff1a; 前几天在服务器上部署了一个免费影视网站&#xff0c;这个应用需要四个容器&#xff0c;同时之前的建站软件workpress也是使用docker部署的&#xff0c;也使用了三个容器。在使用workpress之前&#xff0c;我将影视软件的容器全部停止。 再使用workpress…...

前端TS基础

文章目录 一、类型1、定义类型2、any、unknown、never3、基础类型4、联合类型5、交叉类型6、type、typeof7、作用域 二、数据结构1、数组2、元组3、函数类型4、对象类型 三、接口四、泛型五、enum六、断言七、工具1、模块2、namespace3、装饰器4、declare5、运算符6、映射类型7…...

前端面经每日一题day06

Cookie有什么字段 Name&#xff1a;cookie的唯一标识符 Value&#xff1a;与Name对应&#xff0c;存储Cookie的信息 Domain&#xff1a;可以访问cookie的域名 Path&#xff1a;可以访问cookie的路径 Expires/Max-Age&#xff1a;超时时间 Size&#xff1a;cookie大小 Ht…...