繁体   English   中英

从Cygwin终端运行JUnit 4时出现“ NoClassDefFoundError”

[英]“NoClassDefFoundError” when running JUnit 4 from Cygwin terminal

之前,我下载了junit-4.12.jarhamcrest-core-1.3.jar并将它们添加到Windows CLASSPATH 当我想运行JUnit测试时,我打开Cygwin终端,导航到测试类的目录,然后运行

$ java org.junit.runner.JUnitCore TestClass

或者,如果我不在正确的目录中,请输入以\\分隔的类的相对文件路径(我已经读到,在Windows上,即使运行javajavac ,即使使用Cygwin,这也是必需的)。

我从其他人提供的TestClass.java编译了测试类。 该测试最初应该抛出testThrowsIllegalArgumentException() ,但是我却收到了NoClassDefFoundError好像程序在实际测试之前就以某种方式失败了,接着是一个堆栈跟踪:

JUnit version 4.12
Exception in thread "main" java.lang.NoClassDefFoundError: proj/TestClass (wrong name: TestClass)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
        ...
        at org.junit.runner.JUnitCore.runMain(JUnitCore.java:72)
        at org.junit.runner.JUnitCore.main(JUnitCore.java:36)

(在它们之间有更多的堆栈跟踪,为了节省空间,我删除了它们,因为对我而言,唯一重要的内部步骤是开始和结束。不过,如有必要,我可以编辑该帖子以包括完整的堆栈跟踪。)

我已经查看了我认为相关的所有其他常见问题解答和StackExchange线程,而没有找到问题的答案。 现在看来,它可能与CLASSPATH 我试过添加测试类的目录和使用java -cp进行测试的原始类的目录,但是像其他所有东西一样,它没有用。 任何进一步的帮助将不胜感激,因为我现在完全不知所措。

经过大量的实验,我终于解决了自己的问题。

我的项目目录最初是为Eclipse设计的(我很早就决定,如果可以帮助的话,我宁愿不安装Eclipse,这也许就是为什么我首先遇到这个问题的原因)。 它的结构如下:

proj  
| src  
| | main  
| | | java  
| | | | proj  
| | | | | Class.java  
| | | | | Class.class  
| | | | | [other java files]  
| | test  
| | | java  
| | | | proj  
| | | | | TestClass.java  
| | | | | TestClass.class  
| | | | | [other java test files]  
| [other directories]

另外,文件Class.javaTestClass.java都具有语句package proj; 一开始。 显然,这意味着例如在编译TestClass ,在终端中调用java时,需要从父目录 proj.TestClass其称为proj.TestClass

如果我一直更加关注该错误消息,我会发现java特别期待proj/TestClass 从这个答案到一个单独的问题

java的参数不是文件,它是类路径(您要执行的主类)内的类的完全限定类名。

最终运行的Cygwin命令:

$ cd proj/src
$ java -cp "$CLASSPATH;main\java;test\java" org.junit.runner.JUnitCore proj.TestClass

由于我最终仍在使用Windows,因此java是Windows命令,因此-cp的参数需要格式化为Windows样式的路径列表。

我在Windows上的CLASSPATH.;%JUNIT_HOME%\\junit-4.12.jar;%JUNIT_HOME%\\hamcrest-core-1.3.jar

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM