无法从命令行运行简单的JUnit4测试

时间:2010-11-18 08:22:11

标签: 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:\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);
    }
}

4 个答案:

答案 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 CLASSPATHSetting the class path(第一次点击谷歌)。

答案 1 :(得分:0)

您不会从命令行运行JUnit。测试没有main方法,因此不可执行。

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

请参阅JUnit section of the Ant manual

答案 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