IDEA 单元测试报错:Class not found:xxxx springboot的解决

  • Post category:http

下面就来详细讲解一下“IDEA 单元测试报错:Class not found:xxxx springboot的解决”完整攻略。

问题描述

在使用 IDEA 进行 Spring Boot 项目的单元测试时,有时候会出现报错信息:Class not found:xxxx,这里的 xxxx 是指需要测试的类名。这种情况一般发生在以下两种情况下:

  1. 测试的类或方法未被正确识别;
  2. 依赖引入不正确,导致测试时找不到依赖类。

解决方案

针对以上两种情况,下面分别给出解决方案。

方案一:测试的类或方法未被正确识别

对于这种情况,需要检查是否在测试目录下,比如说在使用 JUnit 进行测试时,测试类需要放到 src/test/java 目录下。如果测试类已经在测试目录下,但还是出现了“Class not found”错误,可能是 IDEA 没有正确识别到测试类或方法。

可采取以下措施解决:

  1. 点击测试类所在文件的右上角,即 IDEA 的测试图标,或者使用快捷键 Ctrl+Shift+R(Windows)或 Command+Shift+R(Mac) 手动运行测试,这样 IDEA 就能识别到测试类和方法了。

  2. 在使用 JUnit 进行测试时,需要确保测试类和被测试的类同一包下。如果测试类和被测试的类不在同一包下,可以使用 @RunWith 和 @SuiteClasses 注解将多个测试类集成在一起。示例代码如下:

@RunWith(Suite.class)
@SuiteClasses({A.class, B.class})
public class AllTest {}

以上代码使用了 JUnit 的 Suite Runner,将 A 类和 B 类集成在 AllTest 中,这样就可以解决测试类和被测试的类不在同一包下的问题。

方案二:依赖引入不正确,导致测试时找不到依赖类

在 Spring Boot 项目中,可能会使用到很多依赖,如果其中某个依赖引入不正确,就有可能导致测试时找不到依赖类。

可采取以下措施解决:

  1. 确认依赖是否正确引入,可以在 pom.xml 中手动添加依赖,或者使用 Maven 或 Gradle 进行依赖管理。

  2. 如果依赖引入正确,但还是出现找不到依赖类的问题,可以尝试清理 Maven 仓库或者 Gradle 缓存,方法如下:

  3. 清理 Maven 仓库:进入本地仓库目录(一般在用户目录下的 .m2/repository 目录),删除对应的依赖文件夹,然后重新构建项目即可。

  4. 清理 Gradle 缓存:在项目根目录下运行 ./gradlew build --refresh-dependencies 命令即可。

示例说明

示例一

在使用 Spring Boot 进行开发时,有时候会遇到需要使用到一些自定义注解的场景,但在使用注解时,测试却报错了:

@CustomAnnotation(value = "test")
public void test() {}

这时候我们需要进行以下操作:

  1. 检查 CustomAnnotation 是否被正确引入,如果没有手动引入,可以在 pom.xml 中添加依赖:
<dependency>
  <groupId>com.xxx</groupId>
  <artifactId>custom-annotation</artifactId>
  <version>x.x.x</version>
</dependency>
  1. 如果依赖已经正确引入,但测试依然无法识别 CustomAnnotation,可以手动运行测试类或方法,重新加载测试类或方法,或者在测试类上加上 @RunWith(SpringRunner.class) 注解。

示例二

在使用 RedisTemplate 进行 Redis 操作时,一般需要使用到 JedisPool。在某些情况下,测试时会报错:

java.lang.ClassNotFoundException: redis.clients.jedis.JedisPoolConfig

这时候我们需要进行以下操作:

  1. 确认是否已经引入了 jedis 依赖。如果没有手动引入,可以在 pom.xml 中添加以下依赖:
<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>x.x.x</version>
</dependency>
  1. 如果依赖已经引入,但测试依然无法识别 JedisPool,可以尝试清理 Maven 仓库或者 Gradle 缓存,然后重新构建项目即可。