2010-11-18 133 views
2

我有一个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); 
    } 
} 

回答

0

你不从命令行运行JUnit就像那样。测试没有main方法,所以不可执行。

如果您使用Ant来编译源代码,那么您应该使用Ant来运行测试。

请参阅JUnit section of the Ant manual

+0

我使用了本书中的build.xml(敏捷Spring与Spring,Hibernate和Eclipse的Java开发) - 还没有真正了解Ant。我试图从头开始...也许我现在应该学习Ant。谢谢。 – user522034 2010-11-18 08:38:46

+0

@ user511808:在这种情况下,我强烈建议使用恰当的开发环境(例如Eclipse/NetBeans/IntelliJ),而不是使用命令行进行摸索。 – skaffman 2010-11-18 08:42:37

+0

尽管测试没有'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

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 CLASSPATHSetting the class path(第一谷歌命中)。

0

您也可以使用Eclipse来运行您的Junit测试。它比使用Ant更快。后者更便于携带。在Eclipse中,只需键入快捷键Alt + Shift + X + T即可运行您的单元测试。

+2

'alt shift x t?这是什么emacs :) – Totoro 2012-02-23 20:06:35

0

谢谢大家! (并且对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

+0

和我不得不添加$ CLASSPATH。 – user522034 2010-11-27 05:46:57