前言:

大家有没有遇到过这种情况,自己从网上拉取了一个开源项目代码,拉取下来后先将代码整体浏览了下,然后想跑下代码中自带的单元测试进行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学习干货文章,您可以来瞧一瞧哟!