下面就来详细讲解一下“IDEA 单元测试报错:Class not found:xxxx springboot的解决”完整攻略。
问题描述
在使用 IDEA 进行 Spring Boot 项目的单元测试时,有时候会出现报错信息:Class not found:xxxx,这里的 xxxx 是指需要测试的类名。这种情况一般发生在以下两种情况下:
- 测试的类或方法未被正确识别;
- 依赖引入不正确,导致测试时找不到依赖类。
解决方案
针对以上两种情况,下面分别给出解决方案。
方案一:测试的类或方法未被正确识别
对于这种情况,需要检查是否在测试目录下,比如说在使用 JUnit 进行测试时,测试类需要放到 src/test/java 目录下。如果测试类已经在测试目录下,但还是出现了“Class not found”错误,可能是 IDEA 没有正确识别到测试类或方法。
可采取以下措施解决:
-
点击测试类所在文件的右上角,即 IDEA 的测试图标,或者使用快捷键 Ctrl+Shift+R(Windows)或 Command+Shift+R(Mac) 手动运行测试,这样 IDEA 就能识别到测试类和方法了。
-
在使用 JUnit 进行测试时,需要确保测试类和被测试的类同一包下。如果测试类和被测试的类不在同一包下,可以使用 @RunWith 和 @SuiteClasses 注解将多个测试类集成在一起。示例代码如下:
@RunWith(Suite.class)
@SuiteClasses({A.class, B.class})
public class AllTest {}
以上代码使用了 JUnit 的 Suite Runner,将 A 类和 B 类集成在 AllTest 中,这样就可以解决测试类和被测试的类不在同一包下的问题。
方案二:依赖引入不正确,导致测试时找不到依赖类
在 Spring Boot 项目中,可能会使用到很多依赖,如果其中某个依赖引入不正确,就有可能导致测试时找不到依赖类。
可采取以下措施解决:
-
确认依赖是否正确引入,可以在 pom.xml 中手动添加依赖,或者使用 Maven 或 Gradle 进行依赖管理。
-
如果依赖引入正确,但还是出现找不到依赖类的问题,可以尝试清理 Maven 仓库或者 Gradle 缓存,方法如下:
-
清理 Maven 仓库:进入本地仓库目录(一般在用户目录下的 .m2/repository 目录),删除对应的依赖文件夹,然后重新构建项目即可。
- 清理 Gradle 缓存:在项目根目录下运行
./gradlew build --refresh-dependencies
命令即可。
示例说明
示例一
在使用 Spring Boot 进行开发时,有时候会遇到需要使用到一些自定义注解的场景,但在使用注解时,测试却报错了:
@CustomAnnotation(value = "test")
public void test() {}
这时候我们需要进行以下操作:
- 检查 CustomAnnotation 是否被正确引入,如果没有手动引入,可以在 pom.xml 中添加依赖:
<dependency>
<groupId>com.xxx</groupId>
<artifactId>custom-annotation</artifactId>
<version>x.x.x</version>
</dependency>
- 如果依赖已经正确引入,但测试依然无法识别 CustomAnnotation,可以手动运行测试类或方法,重新加载测试类或方法,或者在测试类上加上 @RunWith(SpringRunner.class) 注解。
示例二
在使用 RedisTemplate 进行 Redis 操作时,一般需要使用到 JedisPool。在某些情况下,测试时会报错:
java.lang.ClassNotFoundException: redis.clients.jedis.JedisPoolConfig
这时候我们需要进行以下操作:
- 确认是否已经引入了 jedis 依赖。如果没有手动引入,可以在 pom.xml 中添加以下依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>x.x.x</version>
</dependency>
- 如果依赖已经引入,但测试依然无法识别 JedisPool,可以尝试清理 Maven 仓库或者 Gradle 缓存,然后重新构建项目即可。