从命令行运行Junit测试

时间:2014-04-15 22:01:29

标签: java unit-testing command-line junit hamcrest

所以我编写了一个名为Item的类,并使用Junit写了一个名为ItemTest的测试,我想从命令行执行我的测试。这是我遵循的步骤:

  1. 设置路径,运行java.exe并将类路径设置为库

    ...> set path="C:\Program Files (x86)\Java\jdk1.7.0_40\bin"
    ...> set classpath=C:\Program Files (x86)\Java\hamcrest-core-1.3.jar; C:\Program Files (x86)\Java\junit-4.11.jar
    
  2. 然后我只需运行org.junit.runner.JUnitCore来查看添加的库是否在类路径中

    ...>java org.junit.runner.JUnitCore
    

    输出

    JUnit version 4.11
    Time: 0,001
    OK (0 tests)
    
  3. 然后我编译时没有错误ItemItemTest

    C:\Users\User\IdeaProjects\My_project\src>javac .\main\java\Item.java .\test\java\ItemTest.java
    
  4. 然后尝试运行此类

    C:\Users\User\IdeaProjects\My_project\src>java org.junit.runner.JUnitCore main.java.Item test.java.ItemTest
    
  5. 最后我得到了这个

    JUnit version 4.11
    Exception in thread "main" java.lang.NoClassDefFoundError: main/java/Item (wrong name: Item)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 2)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:190)
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:86)
    at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
    at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
    

    如何解决这个问题?我应该将Item放在classpath中吗?

  6. UPD#1

    将此路径放在我的类路径中不起作用(使用和不使用src):

        C:\Users\User\IdeaProjects\My_project\src> 
    

    UPD#2

    当我想要运行课程时,我会在他存储在文件系统或他所放置的包中时对他进行调查?因为我没有包,所以My_project除了项目名称之外还有一个模块名称。

    解决

    这是方法 - 我添加到classpath下一个路径:

    1. 课程Item的路径:

      C:\Users\User\IdeaProjects\My_project\src\main\java\;
      
    2. 测试课程ItemTest的路径:

      C:\Users\User\IdeaProjects\My_project\src\test\java\;
      
    3. 然后只需运行:

      ...>java org.junit.runner.JUnitCore ItemTest
      

1 个答案:

答案 0 :(得分:3)

您必须将.class文件的位置放在类路径中。即使你在同一个文件夹中,如果它们不在类路径中也不会找到它们。那来自DOS x ....其他任何人。

在DOS中,操作系统首先在当前文件夹中查找。操作系统在其他任何地方首先查找路径(或Java的类路径)。

如果Item在com.example.Item包中,并且该类位于c:\ users \ test \ myproj \ target \ com \ example \ Item.class中,则必须添加c:\ users \ test \ myproj \ target \到classpath