关于作者:
一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚信,真正能让大家看懂的技术文章才是好文章,坚持用通俗易懂的大白话写技术文章,并会持续更新。
一、问题现象和分析:
先说下具体现象:大部分都是在做第三阶段第6章MyBatis的springboot-mybatis-quickstart这个项目的单元测试时会遇到这个错误
分析:由于使用IDEA创建SpringBoot项目时,它默认只能选择最近最新的几个SpringBoot的版本,所以你只能选择比较新的版本,目前它默认是4.0.2的版本,你如果不选的话,使用默认的,那创建出来的项目使用的就是SpringBoot4.0.2版本
而较高版本的Spring Boot,比如4.x,默认使用较新版本的JUnit 5
但是,IDEA 呢,咱们使用的是IntelliJ IDEA 2024.1这个版本,为什么统一使用这个版本,咱们之前也说过,是因为经过老师的测试,目前来说这个版本是相对来说较稳定的一个版本,2025的版本多多少少都会有一些小bug,所以咱们统一使用的2024.1这个版本
而IntelliJ IDEA 2024.1 虽然是较新的版本,但可能仍未完全兼容Spring Boot 4.0.2 所依赖的 JUnit Platform 的最新 API 变化,所以就会导致在运行单元测试时,IDEA 内置的测试执行器调用了一个已变更或移除的方法,例如 ReflectionUtils.getDefaultClassLoader(),从而抛出以下的异常:
二、最终的解决方案:
最简单的解决方案就是,直接复制我下面提供的这个pom.xml内容,替换你当前项目里pom.xml的内容,我提供的这个pom里使用的SpringBoot版本使用的和咱们课程里是一样的都是3.2.8的版本,这个版本里依赖的单元测试对2024.1的IDEA 是兼容的
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.8</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.itheima</groupId> <artifactId>springboot-mybatis-quickstart</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-mybatis-quickstart</name> <description>springboot-mybatis-quickstart</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>3.0.3</version> <scope>test</scope> </dependency> <!--数据库连接 Druid-spring-boot-starter--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.19</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>或者也可以去老师给的课程资料里,找到springboot-mybatis-quickstart这个项目,把对应的pom.xml文件的内容直接复制过来,替换你当前项目里pom.xml的内容
然后,一定一定要记得刷新maven,你不刷新,是不会生效的
刷新完之后,再去运行你的单元测试,发现就可以了
如果这篇文章对你有所启发或帮助,希望可以花费你一秒钟的时间,点亮【赞和推荐】,如果能点【分享】给更多同行的人,那就更好了。你的每一个互动,都是我持续创作的最大动力。感恩遇见,感谢陪伴。
往日精选
分文件夹去存文件,其实就是哈希存储的思想
哈希冲突不可避免吗?哈希思想太重要了
聊明白:同步刷盘、异步刷盘以及MQ刷盘策略
对象在内存中的分配、布局、访问、GC垃圾回收
ThreadLocal:原理、内存泄漏、源码分析
大白话聊明白多线程的基础,Java线程的状态和转换
大白话聊聊常见的IO模型:BIO、NIO和IO多路复用
大白话聊懂IO的零拷贝技术
大白话搞懂Java中Synchronized的逻辑
大白话聊一聊,数据结构的基石:数组和链表
大白话聊一聊,常用的哈希算法
对接第三方支付常用到的 对称加密和非对称加密
大白话聊明白Thread、Runnable、FutureTask和Callable之间的关系
每秒百万ID不重复!SnowFlake雪花算法的原理揭秘
用通俗易懂的大白话彻底搞明白SQL中的group by
大白话让你彻底搞明白Java里的Lambda表达式
一篇搞懂ASM、字节码和动态代理,到底咋回事?
为什么Spring不用静态代理?静态代理的三大硬伤!
大白话搞懂Java反射的黑魔法!为啥框架都爱用它?
MySQL索引长度限制和索引长度到底怎么计算?
JDK的Proxy vs CGLIB两种动态代理的武林秘籍
Spring注册Bean别只用@Component了 @Import才是秘密武器
关于作者:
一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚持用通俗易懂的大白话写技术博文,杜绝复制来复制去没营养的内容,坚持用大白话分享自己总结的Java知识,并会持续更新。
点击下方 微信公众号,获取更多Java干货