运行junit测试时找不到.class文件

以下是为NetBean IDE创建的Java程序的目录结构:

$ ls build.xml manifest.mf nbproject src test 

src/steal/MMThread.javapackage语句是

 package steal; 

我编译.java文件

 $ javac src/steal/MMThread.java -d bin/steal/ $ ls bin/steal/ MMThread.class MMThread$Worker.class 

然后我编译并运行了Java Junit测试程序。 编译很好,但运行测试不是。 那我该怎么办? 谢谢

 $ 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 

更新

 $ 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 

类路径设置不正确。 它需要有:

  • JUnit的
  • hamcrest(junit的依赖)
  • 包含.class文件的文件夹的路径

hamcrest的jar应该在你有junit的同一个目录中。 查看/home/t/program_files/programming/eclipse/plugins 。 您可以使用find命令找到它:

 find /home/t/program_files/programming/eclipse/plugins -name '*hamcrest*.jar' 

如果您的机器没有hamcrest,您可以从这里下载:

http://search.maven.org/remotecontent?filepath=org/hamcrest/hamcrest-all/1.3/hamcrest-all-1.3.jar

一旦你有了,你可以把各个部分放在一起:

 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 3.8.2,您在类路径中提供Junit 4。 所以删除4并添加Junit 3.8.2