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

单元测试报错

报错信息如下所示:

五月 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,也可以继续问我,我可以帮你一步步升级 😄

http://www.xdnf.cn/news/10061.html

相关文章:

  • 由反汇编代码确定结构体的完整声明
  • 调试技巧总结
  • SAP 生产订单收货数量超额报错问题研究
  • 《java创世手记》---java基础篇(上)
  • 【Linux基础知识系列】第五篇-软件包管理
  • Ubuntu本地文件上传github(版本控制)
  • 常见压缩算法性能和压缩率对比 LZ4 LZO ZSTD SNAPPY
  • Haproxy搭建web群集
  • WWW22-可解释推荐|用于推荐的神经符号描述性规则学习
  • 【免费的高清录屏软件】OBS Studio
  • 架构加速-深度学习教程
  • A类地址中最小网络号(0.x.x.x) 默认路由 / 无效/未指定地址
  • Qt中使用正则表达式来提取字符串
  • 第100+41步 ChatGPT学习:R语言实现误判病例分析
  • Windows 权限提升 | TryHackMe | Windows Privilege Escalation
  • html中使用nginx ssi插入html
  • 全志科技携飞凌嵌入式T527核心板亮相OpenHarmony开发者大会
  • 智能守护电网安全:探秘输电线路测温装置的科技力量
  • MySQL高可用集群
  • 《Linux C编程实战》笔记:套接字编程
  • day41 python图像识别任务
  • 【多线程初阶】线程状态 线程安全
  • 进阶智能体实战九、图文需求分析助手(ChatGpt多模态版)(帮你生成 模块划分+页面+表设计、状态机、工作流、ER模型)
  • Ubuntu 安装 FSL 及多模态脑MRI的去颅骨处理(含 HD-BET 深度学习方法)
  • 区域未停留检测算法AI智能分析网关V4打造铁道/工厂/机场等场景应用方案
  • mysql隐式转换会造成索引失效的原因
  • 软件评测机构如何保障质量?检测资质、技术实力缺一不可
  • 历年浙江大学计算机保研上机真题
  • JavaScript 性能优化实战研讨
  • antDesignVue中a-upload上传组件的使用