单元测试报错
报错信息如下所示:
五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not support filtering and will therefore be run completely. org.junit.runners.model.InvalidTestClassError: Invalid test class 'redis.demo.RedisTemplateTest': 1. No runnable methods at org.junit.runners.ParentRunner.validate(ParentRunner.java:525) at org.junit.runners.ParentRunner.<init>(ParentRunner.java:92) at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:74) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:137) at org.springframework.test.context.junit4.SpringRunner.<init>(SpringRunner.java:49)
你遇到的这个错误:
深色版本
No runnable methods
以及这个警告:
深色版本
Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not support filtering and will therefore be run completely.
说明 JUnit 没有识别到你的测试方法,也就是说,它找不到任何可以运行的 @Test 方法。
🔍 原因分析
你当前的单元测试类中混合使用了 JUnit 4 和 JUnit Jupiter (JUnit 5) 的注解和机制,这是导致问题的根本原因!
✅ 你的代码结构如下:
Java
深色版本
import org.junit.jupiter.api.Test; // JUnit 5 注解
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith; // JUnit 4 注解
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class RedisTemplateTest {
@Test
public void test1() {
...
}
}
❌ 问题点总结:
问题 说明
混合使用 JUnit 4 和 JUnit 5 @RunWith 和 @SpringRunner 是 JUnit 4 的机制,而 @ExtendWith 和 @org.junit.jupiter.api.Test 是 JUnit 5 的方式
SpringRunner 不兼容 JUnit 5 的测试引擎 SpringRunner 是为 JUnit 4 设计的,无法正确驱动 JUnit 5 的测试
导致“no runnable methods” 因为 JUnit 4 找不到 JUnit 5 的 @Test 方法
✅ 正确解决方案(推荐使用 JUnit 5)
✅ 方式一:全部使用 JUnit 5(推荐)
修改你的测试类如下:
Java
深色版本
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import javax.annotation.Resource;
// 使用 JUnit 5 的扩展模型 + SpringExtension
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = App.class)
public class RedisTemplateTest {
@Resource
private RedisTemplate<Object, Object> redisTemplate;
/**
* 自定义redisTemplate存取字符串
*/
@Test
void test1() {
redisTemplate.opsForValue().set("key1", "key1_value");
Object key1ObjResult = redisTemplate.opsForValue().get("key1");
System.out.println("strResult = " + key1ObjResult);
}
}
✅ 方式二:如果你坚持用 JUnit 4
那就把所有注解换成 JUnit 4 的风格:
Java
深色版本
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class)
public class RedisTemplateTest {
@Resource
private RedisTemplate<Object, Object> redisTemplate;
@Test
public void test1() {
redisTemplate.opsForValue().set("key1", "key1_value");
Object key1ObjResult = redisTemplate.opsForValue().get("key1");
System.out.println("strResult = " + key1ObjResult);
}
}
🧪 总结对比表
内容 JUnit 5(推荐) JUnit 4
测试注解 org.junit.jupiter.api.Test org.junit.Test
启动器注解 @ExtendWith(SpringExtension.class) @RunWith(SpringRunner.class)
Maven 依赖 需要 junit-jupiter-api, junit-jupiter-engine 需要 junit
Spring Boot 默认支持 Spring Boot 2.2+ 支持良好 老项目常用
✅ 最终建议
如果你使用的是 Spring Boot 2.x 或以上版本,强烈推荐使用 JUnit 5。
删除多余的 JUnit 4 注解如 @RunWith。
确保你的 pom.xml 中引入了正确的 JUnit 5 依赖:
Xml
深色版本
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version> <!-- 使用最新稳定版 -->
<scope>test</scope>
</dependency>
如果你不确定应该使用哪种方式,或者想查看完整的 pom.xml 配置、如何迁移 JUnit 4 到 JUnit 5,也可以继续问我,我可以帮你一步步升级 😄
相关文章:
单元测试报错
报错信息如下所示: 五月 30, 2025 5:35:44 下午 org.junit.vintage.engine.descriptor.RunnerTestDescriptor warnAboutUnfilterableRunner 警告: Runner org.junit.internal.runners.ErrorReportingRunner (used on class redis.demo.RedisTemplateTest) does not…...

AWS WAF设置IP白名单
目标 设置一个组白名单IP地址,当发现是这些IP地址发过来的请求后,WAF自动放行。 创建IP集 打开WAF页面,开始IP集创建如下图: 设置ip集,如下图: aws waf acl配置白名单 找到Web ACL,开始在…...

智能门禁的项目
项目需求 矩阵键盘输入密码,正确开锁,错误提示,三次错误后蜂鸣器响三秒;按下#号确认输入,按下*号修改密码;密码保存在W25Q128里;OLED屏幕显示信息。 硬件清单 矩阵键盘OLED显示屏继电器蜂鸣器…...

《Google I/O 2025:AI浪潮下的科技革新风暴》
Google I/O 2025 盛大开幕 在科技飞速发展的时代,Google I/O 开发者大会一直是全球科技爱好者和开发者瞩目的焦点,堪称科技领域的年度盛宴。2025 年 5 月 20 日至 21 日,Google I/O 2025 在美国加州山景城的 Shoreline Amphitheatre 盛大举行…...

职坐标IT培训:硬件嵌入式与AI芯片开发实战
课程体系以硬件嵌入式开发与AI芯片技术融合为核心,构建模块化知识框架。从硬件设计规范切入,系统讲解PCB Layout设计中的信号完整性控制、电磁兼容性(EMC)优化等关键要素,延伸至高速电路设计中阻抗匹配与电源完整性&am…...

一句话开发Chrome摸鱼插件
本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴。 CodeBuddy 一、CodeBuddy新功能特色 Craft智能体:自然语言驱动的全栈开发引擎Craft开发智能体的核心突破在于实现需求理解-任务拆解-代码生成的…...

Spring Boot + OpenCSV 数据清洗实战:CSV 结构化处理与可视化
目录 摘要 演示 一、背景:为什么需要自动化数据清洗? 二、技术选型:为什么选择这三个工具? 三、核心功能实现:从数据读取到智能清洗 1. 配置控制器 2. 文件上传控制器 3. CSV数据处理服务接口 4. CSV数据处理…...

Cmake编译glog成功并在QT中测试成功步骤
glog是开源的日志记录系统,下载地址GitHub - google/glog: C implementation of the Google logging module 跟gflags有点相似,编译和测试过程比较周折,所以记录下来具体的编译和测试步骤。 编译环境:WindowsCmakeVs2022Qt5.14.…...
AI绘画提示词:从零开始掌握Prompt Engineering的艺术
文章目录 什么是AI绘画提示词?提示词的基本结构主体描述场景/背景风格指定技术参数负面提示人物肖像模板风景模板 高级技巧权重调整混合风格颜色控制情绪氛围 常见问题与解决方法手部变形问题构图不理想风格不够突出 提示词示例库科幻场景奇幻人物静物画 结语 在当今…...

xhr、fetch和axios
XMLHttpRequest (XHR) XMLHttpRequest 是最早用于在浏览器中进行异步网络请求的 API。它允许网页在不刷新整个页面的情况下与服务器交换数据。 // 创建 XHR 对象 const xhr new XMLHttpRequest();// 初始化请求 xhr.open(GET, https://api.example.com/data, true);// 设置请…...
lcd-framebuffer驱动开发参考文章
MMAP mmap的时候总是失败,查了很多资料,显存大小是驱动层fb_info->fix.smem_len设置,要遵循内核页大小的整数倍,应用层调用mmap也要遵循对齐。 MMAP使用(一、基本接口)_mmap接口-CSDN博客 基于fbtft和…...

2025吉林ccpc【部分题解】
文章目录 C - SSPPSPSPProblemD.互互互质质质ProblemF. Ever ForeverProblemG.石石石头头头剪剪剪刀刀刀布布布Problem J.奇偶游戏Problem L.好矩阵 C - SSPPSPSP 题目来源:C - SSPPSPSP !](https://i-blog.csdnimg.cn/direct/26fc1492b1724446be61cf39b718cf9b.…...

PowerDesigner通过SQL反向生成类图
PowerDesigner通过SQL反向生成类图 背景操作步骤步骤1: 选择这个步骤2: 目前我是选择的这个步骤3: 选择这个 其他 背景 工作学习 操作步骤 步骤1: 选择这个 步骤2: 目前我是选择的这个 步骤3: 选择这个 其他 其他同事告诉我的, 我还没有亲自尝试, 应该问题不大. 尝试后再反…...
【appium】环境安装部署问题记录
1.安装uiautomator2 appium driver install uiautomator2(超时报错,多执行几遍) 出现code1,安装失败 执行APPIUM_SKIP_CHROMEDRIVER_INSTALL1 appium driver install uiautomator2 安装失败code196 清理缓存npm cache clean --for…...

【bug排查记录】由Redission配置引发的Satoken血案
背景 在今天服务更改服务配置的redis的database后,本地测试通过,发布到线上。出现所有用户登录状态失效,并且重新登录后也是失效的问题,由于鉴权登录框架使用的是satoken,线上database配置的是1,然后去red…...
深入理解 MySQL 隔离级别:理论与实战
深入理解 MySQL 隔离级别:理论与实战 在数据库管理系统中,事务的隔离级别是确保数据一致性和完整性的关键因素。MySQL 作为广泛使用的关系型数据库,提供了四种不同的事务隔离级别: 读未提交(Read Uncommitted)读已提交(Read Committed)可重复读(Repeatable Read)串行…...

MAC程序签名遇到的问题
整体步骤 需要一个apple开发者账号,个人账户注册需要按年付费 申请证书 申请证书链接 command 空格打开聚焦搜索 输入钥匙串访问打开 默认情况下是没有要的证书的 点击左上角的证书助理,选择请求证书 根据输入创建请求文件并保存到本地 点开申请…...

华为OD机试真题——宜居星球改造计划(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《宜居…...
C#实现图片缩略图生成:多种模式详解与实践
C#实现图片缩略图生成:多种模式详解与实践 在图像处理的场景中,生成图片缩略图是一项常见且实用的功能。无论是搭建图片展示网站,还是开发本地图片管理工具,按需生成合适尺寸的缩略图,能够有效减少图片传输和显示所需…...

Linux下基本指令的介绍
目录 1.目标 2.快速认识指令 1.pwd 2.clear 3.ls 4.mkdir 5.cd 6.touch 3.细化每一条指令 1.ls指令 2.pwd指令 注: 3.cd指令 4.touch和mkdir指令 6.删除文件 4.总结 1.目标 上一篇博客中,我们了解了Linux的起源和发展,也知道…...

零基础开始的网工之路第十四天------Linux程序管理
目录 一、Linux程序与进程 1、程序,进程,线程的概念 2、程序和进程的区别 3、进程和线程的区别 二、Linux进程基础(生命周期) 1、进程生命周期 2、父子进程的关系 三、程序管理 1、常见的软件包类型 四、Linux操作系统启动流程详解 1、概述 2、启动流程核心阶段 1…...

SIGGRAPH 2025 | 快手可灵团队提出3D感知的电影级文本到视频生成框架CineMaster
Sora、可灵等视频生成模型令人惊艳的性能表现使得创作者仅依靠文本输入就能够创作出高质量的视频内容。然而,我们常见的电影片段通常是由导演在一个场景中精心布置多个目标的运动、摄像机拍摄角度后再剪辑而成的。例如,在拍摄赛车追逐的场景时࿰…...

历年西安电子科技大学计算机保研上机真题
2025西安电子科技大学计算机保研上机真题 2024西安电子科技大学计算机保研上机真题 2023西安电子科技大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 查找不同的连续数字串个数 题目描述 给定一个数字串,查找其中不同的连续数字串的个…...

利用openwrt路由器和随身WIFI搭建CPE
背景: 最近5GCPE挺火,各种硬件层出不穷,包括DY上很多商家在推的AX3000叠加展锐RM500 5G模块,自己组装CPE,成本也在300 看了下开源硬件,其实就是一个开源的openwrt系统,硬件上5G模块通过usb协议…...

科学智能赋能空间科学研究(2):AI4S 范式下空间科学实验的核心挑战
中国科学院空间应用工程与技术中心在空间科学实验领域的研究覆盖了多模态空间科学实验数据模式挖掘、领域知识抽取、跨学科知识融合与认知智能等研究内容,有效促进了空间科学实验领域的数据应用生态的体系化建设,相关研究成果已正式发表于权威学术期刊《…...
计算机网络学习(九)——CDN
一、CDN CDN(Content Delivery Network,内容分发网络)是一种通过分布式节点将内容更高效地传递给用户的技术架构,广泛应用于加速网站、视频、下载、直播等业务。 CDN 是把内容放到离用户最近的“高速公路入口”,提升访…...

Axure设计案例——科技感渐变线性图
想让数据变化趋势展示告别枯燥乏味,成为吸引观众目光的亮点吗?快来看看这个Axure设计的科技感渐变线性图案例!科技感设计风格凭借炫酷的渐变色彩打破传统线性图的单调,营造出一种令人过目难忘的视觉体验。每一条线条都仿佛是流动的…...

【Opencv+Yolo】Day2_图像处理
目录 一、图像梯度计算 图像梯度-sobal算子: Scharr:权重变化更大(线条更加丰富,比Sobel更加细致捕捉更多梯度信息) Laplacian算子:对噪音点敏感(可以和其他一起结合使用) 二、边…...
嵌入式开发学习(第二阶段 C语言笔记)
内存操作 我们对于内存操作需要依赖于string.h头文件中相关的函数库。 内存操作函数 内存填充 头文件:#include <string.h> 函数原型: void* memset(void *s,int c,size_t n)函数功能:将内存块s的前n个字节填充为c,一般…...

STUSB4500 PPS(PD3.0)快充SINK模块——应用 解析
0 前言 朋友参加车展,收获一枚很漂亮的倍思65W氮化镓快充头,送给我了。 我看了手中只支持33W快充的三星陷入了沉思… 快充头支持PPS协议,我心思这玩意适合做可调电源啊! 上网随便一查没查到,都是转换成5V、9V、12V等…...