我在Eclipse中运行JUnit测试时遇到此错误:
Class not found com.myproject.server.MyTest
java.lang.ClassNotFoundException: com.myproject.server.MyTest
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
我尝试在类路径中添加JUnit
库,尽管我正在使用maven,而JUnit库是POM依赖项。
我已经尝试过清理项目并使用Eclipse的JUnit插件创建了一个新的JUnit测试用例,但仍然遇到同样的错误。
答案 0 :(得分:96)
这似乎是因为当你使用mvn clean compile
时只编译源代码(我正在使用maven 3.1.0所以我不确定它是否总是这样)。
如果你运行mvn test
,测试代码也会编译,但它会运行测试(如果你试图通过Eclipse运行它们,可能不会立即进行测试。)解决这个问题的方法是每当执行test-compile
时,将mvn clean
添加到Maven命令序列中。例如,您将运行mvn clean compile test-compile
。
答案 1 :(得分:90)
我的测试遇到了类似的问题,并且发现在Web上的某个地方,您必须转到项目属性中的 Build Path 并移动 Maven Dependencies < em> JRE系统库。这似乎对我有用。
答案 2 :(得分:18)
我遇到了同样的问题,我可以使用@ slomek&#39; s answer来修复它,但此后问题重新出现。
我最终通过将项目的输出文件夹添加到JUnit测试的运行配置来修复它。步骤是:
Project properties -> Java Build Path -> Default output folder
找到您项目的输出文件夹
<project-folder>/bin
Run -> Run Configurations...
Classpath
标签User Entries
下明确添加项目的输出文件夹 - 即使项目已包含在那里
Advanced -> Add folder
添加输出文件夹此问题可能是由于Eclipse中奇怪的项目设置 - 例如导入为单个项目/文件夹的嵌套maven项目的源文件夹(至少是我的项目设置方式)。
答案 3 :(得分:13)
如果仅在Eclipse中出现此问题,则执行命令Project - &gt;选择项目上的清洁......可能有所帮助。
答案 4 :(得分:11)
在尝试了所有内容后没有任何改进之后,我通过重新启动Eclipse解决了我的问题
答案 5 :(得分:3)
在我的情况下,我有一个错误的maven目录结构。
应该是这样的:
/ src / test / java / com.myproject.server.MyTest
在我解决之后 - 一切都像魅力一样。
答案 6 :(得分:1)
就我而言,从构建路径配置更改Maven依赖关系的顺序对我不起作用。我从“运行”配置更改了其顺序。
请按照以下步骤操作:
•转到运行->运行配置...
•单击单元测试的运行配置,然后单击“类路径”选项卡。
•选中使用临时JAR指定类路径(以避免类路径长度限制)。
可能就足够了,并且您的测试有效。您应该尝试一下,所以按运行按钮。如果没有用。再次按照之前的所有步骤操作,而无需按“运行”按钮,请转到下一步。
•在“用户条目”的子分支中,将“ Maven依赖关系”移到项目或测试类上方。
•单击运行按钮。
答案 7 :(得分:1)
早些时候,在这种情况下,我总是做mvn eclipse:eclipse
并重新启动我的Eclipse并且它有效。迁移到GIT后,它停止了为我工作,这有点奇怪。
这里的基本问题是Eclipse先生找不到编译的类。
然后,我将输出文件夹设置为Project / target / test-classes,默认情况下由mvn clean install
生成而不跳过测试并继续执行以下解决方法:
选项1:为每个测试用例设置类路径
Eclipse - &gt;运行 - &gt;运行配置 - &gt;在JUnit-&gt;下选择mytest - &gt;在classpath选项卡下 - >选择用户条目 - >高级 - >添加文件夹 - &gt;选择 - &gt;应用 - >运行
选项2:创建类路径变量并将其包含在所有测试用例的类路径中
Eclipse - &gt; Windows - &gt;类路径变量 - &gt; New-&gt; [名称:Junit_test_cases_cp |路径:] - &gt;好的 然后去 Eclipse-&gt;运行 - &gt;运行配置 - &gt; JUnit-&gt;选择mytest - &gt;在classpath选项卡下 - &gt;选择用户条目 - &gt;高级 - &gt;添加类路径变量 - &gt;选择Junit_test_cases_cp-&gt; ok - &GT;适用 - &gt;运行
在网上尝试所有建议后,这是目前唯一可行的方法。
答案 8 :(得分:1)
在我的情况下,只有后续步骤帮助我解决了这个问题:
答案 9 :(得分:1)
我的Gradle项目遇到了同样的问题,测试SourceSet有两个资源目录。
此代码段来自main-module.gradle,并将资源目录添加到测试SourceSet:
sourceSets {
test {
resources {
srcDir('../other-module/src/test/resources')
}
}
}
这样做我有两个与项目主模块的测试SourceSet相关的资源目录:
../其他模块/ SRC /测试/资源 src / test / resources(相对于主模块文件夹,由java插件自动添加)
我发现如果我在两个源目录中都有两个同名文件,那么进程资源阶段就会出错。结果,没有开始编译,因此没有.class被复制到bin目录中,其中JUnit正在寻找类。 ClassNotFoundException消失了,只是重命名了两个文件中的一个。
答案 10 :(得分:0)
请检查是否已将junit4添加为依赖项。
例如
difference
答案 11 :(得分:0)
对于不使用maven的项目:这对我有用https://ihategeek.wordpress.com/2012/04/18/eclipse-junit-test-class-not-found/
在Order的底部添加jre和src项目,并在构建路径中导出
答案 12 :(得分:0)
答案 13 :(得分:0)
我通过运行Maven更新解决了我的问题。 右键单击项目> Maven>更新项目
答案 14 :(得分:0)
似乎是编译问题。作为Maven测试运行项目,然后作为JUnit测试运行。
答案 15 :(得分:0)
进行一些虚拟更改并保存测试类可以解决此问题。它将自动构建.class
答案 16 :(得分:0)
我也遇到过同样的问题。我通过删除外部junit jar依赖性解决了该问题,该依赖性是通过从Internet外部下载添加的。但是后来我去了project-> properties-> build path-> add library-> junit->选择了版本(例如junit4)-> apply。
它会自动添加依赖项。它解决了我的问题。
答案 17 :(得分:0)
NoClassDefFoundError实际上意味着它不能初始化该类。它与找到课程没有任何关系。在空字符串上调用trim()时出现此错误。
JUnit不会显示NullPointerException。正常运行时,字符串不为null,因为 我正在从无法用于测试的属性文件中获取字符串。
我的建议是从课程中删除部分内容,直到测试开始通过。然后,您可以确定出现错误的行。
更多信息在这里: https://stackoverflow.com/a/6352584/1308453https://stackoverflow.com/a/6352584/1308453
答案 18 :(得分:0)
也可能是由于“[ERROR]在这种环境中没有提供编译器。也许你在JRE而不是JDK上运行?”
答案 19 :(得分:0)
检查您的项目是否作为Maven项目打开,而不仅仅是常规Java项目。实际上这是一个明智的选择,但这正是您可能会错过它的原因。
答案 20 :(得分:0)
值得一提的另一个答案是,如果你正在使用eGit,并且你的类路径因为像Clover这样的测试覆盖工具而得到更新,那么有时候会有一个清理打嗝并不能完全删除{{1 }}
基本上,我使用了Eclipse的错误日志视图,确定了在清理过程中导致问题的原因,导航到源目录,并手动删除了/path/to/git/repository/<project name>/bin/
目录。完成后我回到Eclipse并刷新(<project name>/bin
)我的项目,错误就消失了。
答案 21 :(得分:0)
1 mvn eclipse:eclipse
2-项目清理所有项目
3-重启
答案 22 :(得分:0)
这些步骤对我有用。
答案 23 :(得分:0)
我的Eclipse Helios调试了Junits时出现了类似的问题。我的问题没有什么不同,因为我能够成功运行Junits,但是当我在调试相同的JUNIT时遇到ClassNotFoundException。
我已经在Stackoverflow.com和其他地方的论坛中尝试过各种不同的解决方案,但似乎没有任何效果。在用这些问题敲了近两天之后,我终于想出了解决方案。
如果解决方案似乎都不起作用,只需删除工作区中创建的.metadata文件夹即可。这会产生额外的导入项目的开销和你已经完成的各种配置,但这些肯定会解决这些问题。
希望这些有所帮助。
答案 24 :(得分:-5)
您可能忘记将主要类和测试用例类放入 / SRC /测试/ JAVA。检查一次。