无法从命令行运行简单的JUnit4测试
我有一个ant编译器,编译src...test
中的JUnit测试文件并将其复制到build/timex...com/visualpatterns/timex/test
(我已经写下了完整的路径名)。但是对我而言,我无法让JUnit运行这个东西。任何人都可以指向正确的方向(我在此浪费时间)?我CLASSPATH
似乎是确定(JUnit的运行),但它不能找到类文件...无法从命令行运行简单的JUnit4测试
$ echo $CLASSPATH
**.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C:\Program Files\junit4.8.2\junit-4.8.2.jar;C:\Program Files\junit4.8.2**
[email protected] /cygdrive/c/java/Code/Command_Line/Projects/timex
$ **java org.junit.runner.JUnitCore**
JUnit version 4.8.2
Time: 0.001
OK (0 tests)
[email protected] /cygdrive/c/java/Code/Command_Line/Projects/timex
$ **java -cp build/timex/WEB-INF/classes org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest**
java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore
Caused by: java.lang.ClassNotFoundException: org.junit.runner.JUnitCore
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: org.junit.runner.JUnitCore. Program will exit.
Exception in thread "main"
/cygdrive/c/java/Code/Command_Line/Projects/timex/
------------------------------------------------------
**build/timex/WEB-INF/classes/com/visualpatterns/timex/test/***SimpleTest.class*
SimpleTest.java
package com.visualpatterns.timex.test;
import org.junit.Test;
import static org.junit.Assert.assertTrue;
public class SimpleTest
{
int value1 = 2, value2 = 3, expectedResult = 5;
@Test
public void addSuccess()
{
assertTrue(value1 + value2 == expectedResult);
}
@Test
public void addFail()
{
assertTrue(value1 - value2 == expectedResult);
}
}
你不从命令行运行JUnit就像那样。测试没有main
方法,所以不可执行。
如果您使用Ant来编译源代码,那么您应该使用Ant来运行测试。
在第二次执行中,您正在使用-cp
更改类路径。这是好的,如果你想添加新的条目到类路径,但在你的情况下,你正在替换旧的类路径获得junit库。这就是为什么它不能找到junit类(java.lang.NoClassDefFoundError: org/junit/runner/JUnitCore
)。你必须使用类似的东西:
$ echo $CLASSPATH
.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C:\Program Files\junit4.8.2\junit-4.8.2.jar;C:\Program Files\junit4.8.2
(to verify the classpath for junit)
$ java -cp $CLASSPATH;build/timex/WEB-INF/classes org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest
(separate new classpath entries with ;)
参见PATH and CLASSPATH和Setting the class path(第一谷歌命中)。
谢谢大家! (并且对Progman特别留言)。问题是在类参数周围加上单引号(我正在使用Cygwin)。
我@我-PC/cygdrive/C/JAVA /代码/ COMMAND_LINE /项目/天美 $ java命令“$ CLASSPATH; C:\ Program Files文件\ junit4.8.2 \的junit-4.8.2.jar; C:\ Program Files \ junit4.8.2; build/timex/WEB-INF/classes'org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest
就Eclipse/Ant而言,简单 ;-)。我认为当你从命令行开始时,你会学到更多东西,而不是让自动化完成所有这些,就像阅读地图和使用GPS一样。一旦我得到这个小的网络拱门/应用程序,我会切换到Eclipse来节省时间,但是为了知道我更喜欢学习更多(并且犯下愚蠢的错误)。
Me @ My-PC/cygdrive/c/java/Code/Command_Line/Projects/timex $ java -cp'$ CLASSPATH; C:\ Program Files \ junit4.8.2 \ junit-4.8.2.jar; C:\ Program Files \ junit4.8.2; build/timex/WEB-INF/classes'org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest
和我不得不添加$ CLASSPATH。 – user522034 2010-11-27 05:46:57
我使用了本书中的build.xml(敏捷Spring与Spring,Hibernate和Eclipse的Java开发) - 还没有真正了解Ant。我试图从头开始...也许我现在应该学习Ant。谢谢。 – user522034 2010-11-18 08:38:46
@ user511808:在这种情况下,我强烈建议使用恰当的开发环境(例如Eclipse/NetBeans/IntelliJ),而不是使用命令行进行摸索。 – skaffman 2010-11-18 08:42:37
尽管测试没有'main'方法,'JUnitCore'却有(参见http://junit.sourceforge.net/javadoc/org/junit/runner/JUnitCore.html#main(java.lang.String .. ))。我同意如果您使用Ant来构建应该使用JUnit Ant任务的构建。 – NamshubWriter 2010-11-18 14:21:56