【问题标题】:Running Junit test from command line从命令行运行 Junit 测试
【发布时间】:2014-05-30 11:51:53
【问题描述】:

所以我编写了一个名为 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. 然后尝试 ro 运行这些类

    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放在类路径中吗?

UPD#1

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

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

UPD#2

当我想在他存储在文件系统或他放置的包中时运行我向他讲授的课程时?因为我没有包,所以My_project除了是项目名之外就是模块名。

已解决

这就是方式 - 我将下一个路径添加到类路径:

  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
    

【问题讨论】:

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


    【解决方案1】:

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

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

    如果 Item 在包 com.example.Item 中并且类在 c:\users\test\myproj\target\com\example\Item.class 中,那么您必须添加 c:\users\test\myproj\目标\到类路径

    【讨论】:

    • 如果在“项目结构”对话框中我有“My_project”作为项目名称和模块名称,我是否有问题?你能帮我理解“项目编译器输出”路径在某种程度上与我的问题相关吗?
    • 听起来像 Maven。不,你没有问题。您可以使用任何文件夹名称和任何模块名称,只要您正确引用它们即可。
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多