單元測試報錯

報錯信息如下所示:

五月 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.pswp.cn/web/82326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/82326.shtml
英文地址,請注明出處:http://en.pswp.cn/web/82326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

00 QEMU源碼分析中文注釋與架構講解(v8.2.4版本)

QEMU-v8.2.4源碼中文注釋與架構講解 文檔會不定期更新 注釋作者將狼才鯨創建日期2025-05-30更新日期2025-06-02 CSDN閱讀地址&#xff1a;QEMU源碼中文注釋與架構講解Gitee源碼倉庫地址&#xff1a;才鯨嵌入式/qemu 一、前言 其它參考教程的網址&#xff1a; QEMU 源碼目錄…

線段樹刷題記錄

一篇講解很好的線段樹博客&#xff1a;數據結構--線段樹篇_數據結構線段樹-CSDN博客 一、區間查詢 無修改&#xff1a; &#xff08;一&#xff09;最值問題&#xff1a; 1.P1816 忠誠 - 洛谷 思路&#xff1a; 模板。 注意&#xff1a; 無。 代碼&#xff1a; #include …

從一到無窮大 #46:探討時序數據庫Deduplicate與Compaction的設計權衡

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。 本作品 (李兆龍 博文, 由 李兆龍 創作)&#xff0c;由 李兆龍 確認&#xff0c;轉載請注明版權。 文章目錄 引言Compaction AlgorithmsCompact Execution Flow Based On VeloxLocalMergeSource的…

大廠前端研發崗位設計的30道Webpack面試題及解析

文章目錄 一、基礎核心二、配置進階三、性能優化四、Loader原理五、Plugin機制六、高級應用七、工程化實戰八、原理深挖九、異常處理十、綜合場景一、基礎核心 Webpack的核心概念是什么? 解析:入口(entry)、輸出(output)、加載器(loader)、插件(plugins)、模式(mode)。Loader…

pytest 常用命令參數

以下是 pytest 常用命令參數 的整理&#xff0c;涵蓋測試運行、過濾、調試、報告等常見場景&#xff0c;方便你高效使用 pytest&#xff1a; 1. 基本測試運行 命令說明pytest運行當前目錄及子目錄下所有測試&#xff08;test_*.py 或 *_test.py&#xff09;pytest path/to/tes…

利用openwrt路由器和隨身WIFI搭建CPE

背景&#xff1a; 最近5GCPE挺火&#xff0c;各種硬件層出不窮&#xff0c;包括DY上很多商家在推的AX3000疊加展銳RM500 5G模塊&#xff0c;自己組裝CPE&#xff0c;成本也在300 看了下開源硬件&#xff0c;其實就是一個開源的openwrt系統&#xff0c;硬件上5G模塊通過usb協議…

Python中使用pandas

使用Pandas進行數據處理和分析 Pandas是Python中最流行的數據處理和分析庫之一。下面我將介紹Pandas的基本使用方法。 安裝Pandas pip install pandas 基本數據結構 1. Series - 一維數組 import pandas as pd# 創建Series s pd.Series([1, 3, 5, 7, 9]) print(s) 2. D…

ISO18436-2 CATII級振動分析師能力矩陣

ISO18436-2021是當前針對針對分析師的一個標準&#xff0c;它對振動分析師的能力和知識體系做了4級分類&#xff0c;這里給出的是一家公司響應ISO18436的CATII級標準&#xff0c;做的一個專題培訓的教學大綱。摘自&#xff1a; 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…

Qt實現的水波進度條和溫度進度條

一.效果 二.原理 1.水波 要模擬波浪,就要首先畫出一條波浪線,正弦余弦曲線就很適合。 y=A*sin(ω*x+φ)+k y=A*cos(ω*x+φ)+k 這是正弦余弦曲線的公式,要想實現水波效果,那需要兩條曲線,一條曲線的波峰對著另外一條曲線的波谷,要實現這樣的曲線效果,只有讓正弦曲線前移…

《Python 應用中的藍綠部署與滾動更新:持續集成中的實踐與優化》

《Python 應用中的藍綠部署與滾動更新:持續集成中的實踐與優化》 引言 在現代軟件開發中,持續集成與持續部署(CI/CD)已成為標準實踐。面對頻繁發布與升級需求,藍綠部署和滾動更新兩種策略為 Python 應用提供了穩定、安全的發布方式。本文將深入探討這兩種策略的原理、適…

4.2.2 Spark SQL 默認數據源

在本實戰概述中&#xff0c;我們探討了如何在 Spark SQL 中使用 Parquet 格式作為默認數據源。首先&#xff0c;我們了解了 Parquet 文件的存儲特性&#xff0c;包括其二進制存儲方式和內嵌的 Schema 信息。接著&#xff0c;通過一系列命令&#xff0c;我們演示了如何在 HDFS 上…

當前用戶的Git本地配置情況:git config --local --list

通過config命令可以查詢當前用戶的本地配置情況。這些配置項定義了 Git 在當前倉庫中的行為&#xff0c;包括文件權限處理、符號鏈接處理以及大小寫敏感性等。 git config --local --list core.repositoryformatversion0 指定 Git 倉庫的格式版本。版本 0 是最初的格式。 cor…

Flutter 包依賴升級指南:讓項目保持最新狀態

在 Flutter 開發過程中&#xff0c;依賴項管理是確保項目順利運行和持續優化的關鍵環節。依賴項是項目中不可或缺的外部庫&#xff0c;它們提供了各種功能&#xff0c;從 UI 組件到數據處理工具&#xff0c;幫助開發者快速構建應用。然而&#xff0c;隨著時間的推移&#xff0c…

【深度學習】實驗四 卷積神經網絡CNN

實驗四 卷積神經網絡CNN 一、實驗學時&#xff1a; 2學時 二、實驗目的 掌握卷積神經網絡CNN的基本結構&#xff1b;掌握數據預處理、模型構建、訓練與調參&#xff1b;探索CNN在MNIST數據集中的性能表現&#xff1b; 三、實驗內容 實現深度神經網絡CNN。 四、主要實驗步…

SpringBoot高校宿舍信息管理系統小程序

概述 基于SpringBoot的高校宿舍信息管理系統小程序項目&#xff0c;這是一款非常適合高校使用的信息化管理工具。該系統包含了完整的宿舍管理功能模塊&#xff0c;采用主流技術棧開發&#xff0c;代碼結構清晰&#xff0c;非常適合學習和二次開發。 主要內容 這個宿舍管理系…

Redis 難懂命令-- ZINTERSTORE

**背景&#xff1a;**學習的過程中 常用的redis命令都能快速通過官方文檔理解 但是還是有一些比較難懂的命令 **目的&#xff1a;**寫博客記錄一下&#xff08;當然也可以使用AI搜索&#xff09; 在Redis中&#xff0c;ZINTERSTORE 是一個用于計算多個有序集合&#xff08;So…

React 路由管理與動態路由配置實戰

React 路由管理與動態路由配置實戰 前言 在現代單頁應用(SPA)開發中&#xff0c;路由管理已經成為前端架構的核心部分。隨著React應用規模的擴大&#xff0c;靜態路由配置往往難以滿足復雜業務場景的需求&#xff0c;尤其是當應用需要處理權限控制、動態菜單和按需加載等高級…

【學習筆記】深度學習-梯度概念

一、定義 梯度向量不僅表示函數變化的速度&#xff0c;還表示函數增長最快的方向 二、【問】為什么說它表示方向&#xff1f; 三、【問】那在深度學習梯度下降的時候&#xff0c;還要判斷梯度是正是負來更新參數嗎&#xff1f; 假設某個參數是 w&#xff0c;損失函數對它的…

題海拾貝:P8598 [藍橋杯 2013 省 AB] 錯誤票據

Hello大家好&#xff01;很高興我們又見面啦&#xff01;給生活添點passion&#xff0c;開始今天的編程之路&#xff01; 我的博客&#xff1a;<但凡. 我的專欄&#xff1a;《編程之路》、《數據結構與算法之美》、《題海拾貝》 歡迎點贊&#xff0c;關注&#xff01; 1、題…

webpack的安裝及其后序部分

npm install原理 這個其實就是npm從registry下載項目到本地&#xff0c;沒有什么好說的 值得一提的是npm的緩存機制&#xff0c;如果多個項目都需要同一個版本的axios&#xff0c;每一次重新從registry中拉取的成本過大&#xff0c;所以會有緩存&#xff0c;如果緩存里有這個…