2014-04-15 264 views
2

因此,我編寫了一個名爲Item的類,並使用Junit編寫了一個名爲ItemTest的測試,我想從命令行執行我的測試。這是我遵循的步驟:從命令行運行Junit測試

  1. 設置路徑,運行的java.exe和classpath設置爲庫

    ...> 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放在classpath中嗎?

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 
    

回答

3

你必須把.class文件的位置在類路徑中。即使你在同一個文件夾中,如果它們不在類路徑中,也不會找到它們。來自DOS x ....其他任何人。

在DOS中,OS在當前文件夾中首先查找。在其他地方,操作系統首先在路徑(或Java的類路徑)中查找。

如果Item位於包com.example.Item中,並且該類位於c:\ users \ test \ myproj \ target \ com \ example \ Item.class中,那麼您必須添加c:\ users \ test \ myproj \目標\到類路徑

+0

我有一個問題,如果在「項目結構」對話框我有「My_project」作爲項目名稱,也作爲模塊名稱?你能幫我理解「項目編譯器輸出」路徑與我的問題有什麼關係嗎? – marknorkin

+1

聽起來像Maven。不,你沒有問題。您可以擁有任何文件夾名稱和任何模塊名稱,只要您正確引用它們即可。 –