使用junit-4.xx.jar做单元测试报 “java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing“ 异常完美解决方案 !!

很简单很简单的一个小功能 , 就是简单的Junit单元测试入门

代码以及项目结构导入的jar包及其jar包版本信息如下:

然后右键 Run As -> Junit Test运行单元测试代码后的报错如下:

看到过一篇相同类型问题的博客提出的解决思路和方法是下面这样的:           原博客地址 https://blog.csdn.net/castle07/article/details/8553704

 博主的思路是很正常的; 现小编在此基础上做出更为完整的补充和切实可行的解决方案: 

只需要加入hamcrest-core-1.3.jar 这个jar包即可(注意版本是1.3这个版本, 回到文章开头; 小编随机加入的hamcrest-core-2.2.jar这个2.2版本都不行, 运行还是报相同的错误)

加入后项目结构以及jar包结构版本信息如下:

然后右键运行结构如下:

绿色表示Junit测试通过; 小编测试将hamcrest-library 这个jar包删掉也是可以完美成功运行的; 大家继续请看项目结构图:

 然后右键运行结果:

hamcrest-core-1.3.jar  jar包下载地址小编都给你安排好了, 不需要任何积分, 免费下载地址: https://download.csdn.net/download/qq_35661171/13964994

至于为什么 hamcrest-core-1.3.jar 这个jar包版本必须是1.3这个版本小编目前还不是很清楚, 小编只是猜测到可能更导入的junit的版本也有关系 ; 希望读到这篇文章的大牛给出更为完美的解释;

错误虽小, 但必定有其意义,帮助到需要帮助的人;  谢谢 !

### JavaNoClassDefFoundError错误JUnit相关的类加载问题解决方案 `java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter` 是一种常见的运行时异常,通常表明程序试图访问某个类 `org.junit.runner.manipulation.Filter` 的定义,但在运行时无法找到该类。这种问题可能由多种原因引起,以下是详细的分析和解决方法: #### 1. **Gradle 或 Maven 配置中的依赖冲突** 如果项目同时引入了多个版本的 JUnit 库(例如 JUnit 4JUnit 5),可能会导致类加载器找不到某些特定的类。这是因为不同版本的库可能存在命名空间上的差异。 - 如果使用的是 Gradle 构建工具,可以检查是否存在以下两种依赖项: ```groovy testImplementation 'junit:junit:4.13.2' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.9.0' ``` 这种情况下,推荐移除旧版 JUnit 4 的依赖,并改用 `junit-vintage-engine` 来支持向后兼容性[^3]。 修改后的构建脚本应类似于以下内容: ```groovy testImplementation 'org.junit.vintage:junit-vintage-engine:5.9.0' ``` - 对于 Maven 用户,类似的调整可以通过以下方式完成: ```xml <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>5.9.0</version> <scope>test</scope> </dependency> ``` #### 2. **模块路径 (ModulePath) 与类路径 (ClassPath)** 在 Eclipse 中开发时,有时会不小心将 JUnit 添加到了 ModulePath 而非 ClassPath。这可能导致运行时缺少必要的元数据文件或资源文件,从而引发 `NoClassDefFoundError` 异常[^2]。 - 解决方案是确保 JUnit 被正确放置到项目的 ClassPath 下。具体操作步骤如下: - 右键单击项目 -> 属性 (`Properties`) -> Java Build Path。 - 切换至 Libraries 标签页,确认 JUnit 是否被添加到 ClassPath 中而非 ModulePath。 #### 3. **运行时环境配置不当** 即使编译阶段一切正常,在运行测试时仍可能出现此错误。这是由于运行时环境中未含所需的 JUnit 类库所致。 - 使用 IDE 执行单元测试时,请验证其运行配置是否含了完整的测试依赖项。对于 IntelliJ IDEA 用户来说,需进入 Run Configurations 页面并手动指定 JVM 参数以及 ClassPath 设置。 - 若采用命令行执行,则需要显式声明 `-cp` 参数来指明所有必需 jar 文件的位置。例如: ```bash java -cp .:lib/* org.junit.platform.console.ConsoleLauncher --select-class com.example.MyTestClass ``` #### 4. **清理缓存与重新同步项目** 有时候,IDE 缓存或者构建系统的临时状态也可能成为诱因之一。尝试以下措施可以帮助排除潜在干扰因素: - 清理整个工程目录下的目标产物(如 target/build 文件夹); - 更新本地仓库索引(适用于 Maven 工程可通过 mvn clean install 完成;而 Gradle 则对应 gradlew build --refresh-dependencies 命令)。 --- ### 总结 针对 `java.lang.NoClassDefFoundError: org/junit/runner/manipulation/Filter` 错误,主要可以从以下几个方面入手排查:一是审查构建工具里的依赖管理是否有冗余或缺失情况发生;二是注意区分模块路径同传统意义上的类别路径概念区别对待第三方框架引用位置安排合理与否;最后别忘了适时刷新工作区内的各项设置以保证最新改动生效无虞。 ```python # 示例代码片段展示如何通过 Python 模拟类似场景处理逻辑 try: import some_nonexistent_module except ImportError as e: print(f"Import failed due to {e}") finally: pass ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值