Java Can';无法从命令行运行简单的JUnit4测试
我有一个ant构建,它在Java Can';无法从命令行运行简单的JUnit4测试,java,junit,junit4,Java,Junit,Junit4,我有一个ant构建,它在src…test中编译JUnit测试文件,并将其复制到build/timex…com/visualpatterns/timex/test(我在下面写了完整的路径名)。但就我个人而言,我不能让JUnit来管理这件事。有人能给我指出正确的方向吗(我在这上面浪费了很多时间)?我的CLASSPATH似乎正常(JUnit运行),但它找不到类文件 $ echo $CLASSPATH **.;C:\Program Files\Java\jre6\lib\ext\QTJava.zip;C
src…test
中编译JUnit测试文件,并将其复制到build/timex…com/visualpatterns/timex/test
(我在下面写了完整的路径名)。但就我个人而言,我不能让JUnit来管理这件事。有人能给我指出正确的方向吗(我在这上面浪费了很多时间)?我的CLASSPATH
似乎正常(JUnit运行),但它找不到类文件
$ 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**
Me@My-PC /cygdrive/c/java/Code/Command_Line/Projects/timex
$ **java org.junit.runner.JUnitCore**
JUnit version 4.8.2
Time: 0.001
OK (0 tests)
Me@My-PC /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"
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 ; )
另请参见和(首次谷歌点击)。您也可以使用来运行Junit测试。它比使用Ant更快。然而,后者更便于携带。在Eclipse中,只需键入键盘快捷键Alt+Shift+X+T即可运行单元测试 谢谢大家!!(并向节目主持人发出特别的呼喊声)。问题是在类参数周围加上单引号(我使用的是Cygwin)
Me@My-PC/cygdrive/c/java/Code/Command\u-Line/Projects/timex
$java-cp'$CLASSPATH;C:\ProgramFiles\junit4.8.2\junit-4.8.2.jar;C:\ProgramFiles\junit4.8.2;build/timex/WEB-INF/classes'org.junit.runner.JUnitCore com.visualpatterns.timex.test.SimpleTest
就Eclipse/Ant而言,这太容易了;-)。我认为,当你开始使用命令行而不是让自动化来完成这一切时,你会学到更多,有点像阅读地图和使用GPS。一旦我开始使用这个小小的web arch/应用程序,我将切换到Eclipse以节省时间,但我更愿意多学一点(并犯一些愚蠢的错误)
Me@My-PC/cygdrive/c/java/Code/Command\u-Line/Projects/timex
$java-cp'$CLASSPATH;C:\ProgramFiles\junit4.8.2\junit-4.8.2.jar;C:\ProgramFiles\junit4.8.2;build/timex/WEB-INF/classes'org.junit.runner.JUnitCore.com.visualpatterns.timex.test.SimpleTest我使用了书中的build.xml(使用Spring、Hibernate和Eclipse的敏捷Java开发)——我还不太了解Ant。我试着从头开始…也许我现在应该学习蚂蚁。谢谢。@user511808:在这种情况下,我强烈建议从一个合适的开发环境开始(例如Eclipse/NetBeans/IntelliJ),而不是在命令行中摸索。虽然测试没有
main
方法,但有JUnitCore
方法(请参阅)。我同意如果您使用Ant进行构建,您应该使用JUnit Ant任务?这是什么
$ 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 ; )