运行junit测试时找不到.class文件 [英] Can't find the .class file when running a junit test

查看:184
本文介绍了运行junit测试时找不到.class文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是创建的 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆