运行junit测试时找不到.class文件 [英] Can't find the .class file when running a junit test
问题描述
这是创建的 Java程序的目录结构对于NetBean IDE:
Here is the directory structure of a Java program, created for NetBean IDE:
$ ls
build.xml manifest.mf nbproject src test
src/steal/MMThread.java
中的package
语句是
package steal;
我通过
$ javac src/steal/MMThread.java -d bin/steal/
$ ls bin/steal/
MMThread.class MMThread$Worker.class
然后我编译并运行Java Junit测试程序.编译很好,但是不能运行测试.那我该怎么办?谢谢
I then compiled and ran the Java Junit test program. Compilation is fine, but running test isn't. What shall I do then? Thanks
$ javac -cp bin/:/home/t/program_files/programming/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar test/steal/MMThreadTest.java
$ ls test/steal/
MMThreadTest.class MMThreadTest.java
$ java -cp bin/:/home/t/program_files/programming/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar org.junit.runner.JUnitCore steal.MMThreadTest
JUnit version 4.11
Could not find class: steal.MMThreadTest
Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:996)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:173)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:772)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:670)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:593)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:551)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:75)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:553)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486)
... 15 more
更新
Update
$ java -cp test/:bin/:/home/t/program_files/programming/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar org.junit.runner.JUnitCore steal.MMThreadTest
JUnit version 4.11
Exception in thread "main" java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:996)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:173)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:772)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:670)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:593)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:551)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:75)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
Caused by: java.lang.ClassNotFoundException: org.hamcrest.SelfDescribing
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:553)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:486)
... 15 more
推荐答案
类路径设置不正确.它必须具有:
The class path setting is incorrect. It needs to have:
- junit
- hamcrest(对junit的依赖)
- 具有您的
.class
文件的文件夹的路径
- junit
- hamcrest (dependency of junit)
- the path to the folder that has your
.class
files
一罐hamcrest应该与您拥有junit的目录相同.
在/home/t/program_files/programming/eclipse/plugins
中查找.
您可以使用find
命令找到它:
The jar of hamcrest should be in the same directory where you have junit.
Look in /home/t/program_files/programming/eclipse/plugins
.
You could use the find
command to find it:
find /home/t/program_files/programming/eclipse/plugins -name '*hamcrest*.jar'
如果您的计算机没有障碍物, 您可以从此处下载:
If your machine doesn't have hamcrest, you can download from here:
http://search.maven.org/remotecontent?filepath=org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3.jar
有了这些,就可以将各个部分放在一起:
Once you have that, you can put the pieces together:
junit=/home/t/program_files/programming/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar
hamcrest=/home/t/program_files/programming/eclipse/plugins/idontknowwhere/hamcrest.jar
java -cp "$junit:$hamcrest:test/steal" org.junit.runner.JUnitCore MMThreadTest
这篇关于运行junit测试时找不到.class文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!