我有一个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:\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"
/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);
}
}
答案 0 :(得分:3)
在第二次执行中,您将使用-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(第一次点击谷歌)。
答案 1 :(得分:0)
您不会从命令行运行JUnit。测试没有main
方法,因此不可执行。
如果您使用Ant来编译源代码,那么您也应该使用Ant来运行测试。
答案 2 :(得分:0)
您也可以使用Eclipse来运行Junit测试。它比使用Ant更快。然而后者更便携。在Eclipse中,只需键入键盘快捷键Alt + Shift + X + T即可运行单元测试。
答案 3 :(得分:0)
全部谢谢!! (以及对Progman的特别呐喊)。问题是在类参数周围放置单引号(我正在使用Cygwin)。
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
就Eclipse / Ant而言,这太容易了;-)。我认为你从命令行开始学习更多,而不是让自动化完成所有工作,有点像阅读地图而不是使用GPS。一旦我开始使用这个小小的web arch / app,我将切换到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