Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从命令行运行简单的JUnit4测试_Java_Junit_Junit4 - Fatal编程技术网

Java Can';无法从命令行运行简单的JUnit4测试

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

我有一个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"

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 ; )