跨包运行JUnit测试时遭遇ClassNotFoundException问题求助
ClassNotFoundException: tests.BoardTests的方案 这种类找不到的问题在JUnit测试场景里太常见了,我给你整理几个优先级最高的排查步骤,一步步来:
确认测试类的包结构与类名完全匹配
Java是大小写敏感的,你得确保测试类确实放在tests包下,类名是精确的BoardTests(比如别写成boardTests或者BoardTest少个s)。另外在Eclipse里,存放测试类的文件夹必须被标记为「Test Source Folder」——右键文件夹 → Build Path → Use as Test Source Folder,不然编译阶段不会把这个文件夹里的类打包到测试类路径中。检查编译后的类文件是否存在
去你的项目编译输出目录(一般是bin/test或者target/test-classes)里找tests/BoardTests.class文件。如果找不到,说明测试类根本没编译成功,先去Eclipse的「Problems」视图看看有没有语法错误、缺失依赖这类编译问题,这些都会导致类文件生成失败。验证JUnit运行配置的正确性
右键测试类选择「Run As → JUnit Test」时,确认运行配置里的测试类路径是对的。或者直接去「Run Configurations」里找到对应的JUnit配置:- 切换到「Test」标签,检查「Test class」是否填的是
tests.BoardTests,有没有拼写错误; - 切换到「Classpath」标签,确保测试编译输出目录(比如
bin/test)已经被添加到类路径中。
- 切换到「Test」标签,检查「Test class」是否填的是
清理并重建项目
Eclipse的编译缓存偶尔会抽风,试试「Project → Clean」,选中你的项目清理后再重新Build。这一步能解决很多莫名其妙的类加载问题。如果用了构建工具,检查JUnit依赖配置
要是你的项目用Maven/Gradle,得确保JUnit依赖是testscope的,比如Maven的配置应该是:<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency>依赖缺失或者scope不对,也会影响测试类的加载。
附上你提到的错误信息:
java.lang.ClassNotFoundException: tests.BoardTests at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at org.eclipse.jdt.internal.junit.runner.Remot...
内容的提问来源于stack exchange,提问作者Nabeel Khalid




