单元测试报错:org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader
阅读数: 次
前言:
大家有没有遇到过这种情况,自己从网上拉取了一个开源项目代码,拉取下来后先将代码整体浏览了下,然后想跑下代码中自带的单元测试进行debug下,但是此时就突然报了一个奇怪的异常: org.junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader
然后根据错误信息去网上一顿查询,并且根据好几个博客进行修改,但最终还是无法修复异常;一时让人苦恼,真他喵的烦 [::>_<::]
不再啰嗦了,直接进入主题:出现这个问题时,应该怎么修改;
本文主线:
①、出现问题时的项目环境
②、出现此错误的原因
③、此问题的解决方案(两种方案)
项目环境:
开发工具:IntelliJ IDEA 2017.1
代码框架:SpringBoot
单元测试:junit5
「开始时测试类如下:」
出现此错误的原因:
通过查阅资料得知,由于单元测试时使用的是 org.junit.jupiter.api.Test ,而这个模块是Junit5才有的,并且Junit官网对这个模块使用有一定的要求, 也就是IDEA的版本必须要是 2017.3及以后的 ,但是我使用的是 2017.1 版本的IDEA,所以就出现此问题了;
官网地址:https://junit.org/junit5/docs/current/user-guide/#running-tests-ide
问题解决方案:
方案一:
通过上面的描述的错误原因得知,主要是IDEA的版本过低,我们可以直接升级IDEA,升级到 2017.3及以后的版本即可;
但是如果不想费时升级IDEA的话,可以通过下面这种方法对代码进行修改即可;
方案二:
通过出现的原因得知,是由于低版本的IDEA使用Junit5导致的,可以不使用Junit5了,直接使用支持的 Junit4 呀;
「修改步骤:」
1、首先将POM.xml文件中的 spring-boot-starter-test 依赖中的junit-jupiter-api 排除掉:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</exclusion>
</exclusions>
</dependency>
2、然后在 POM.xml文件中的 导入 junit4 的依赖;
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
</dependency>
3、此时修改告一段落,但是如果你的测试方法中,需要使用到 依赖注入的注解 时,此时就需要对测试方法进一步修改,修改成如下:
在测试类上加入@RunWith注解 将@Test注解改为使用junit4
@RunWith(SpringRunner.class):此注解的作用就是启动Spring容器,这样自动注入才有效
@SpringBootTest(classes = ShardApplication.class):指定SpringBoot的启动类, ShardApplication 需要改为自己的启动类
4、注意:测试类和测试方法需要都设置为被 public 修饰;
❤ 点赞 + 评论 + 转发 哟
如果本文对您有帮助的话,请挥动下您爱发财的小手点下赞呀,您的支持就是我不断创作的动力,谢谢啦!
您可以微信搜索 【木子雷】 公众号,大量Java学习干货文章,您可以来瞧一瞧哟!
- 文章连结: https://leishen6.github.io/2021/06/04/idea_junit5/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!