2012-07-08 133 views
69

當在Eclipse中運行JUnit測試時,我收到此錯誤未發現異常:類運行JUnit測試

Class not found com.myproject.server.MyTest 
java.lang.ClassNotFoundException: com.myproject.server.MyTest 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    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:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 

我試過在classpath中添加JUnit庫雖然我使用maven,和JUnit庫在POM依賴中。

我已經嘗試清理項目並使用Eclipse的JUnit插件創建了一個新的JUnit測試用例,但仍然出現相同的錯誤。

+5

嘗試運行'mvn clean test'一旦它將編譯所有的測試類 – 2012-07-08 06:47:11

+1

您可以請檢查com.myproject.server.MyTest是否存在bin文件夾中?我的意思是,如果它沒有編譯,因爲編譯或構建路徑錯誤,你會得到這個錯誤。 – vikas 2012-07-08 12:22:20

+0

你在測試一個課程還是整個項目? – Doszi89 2012-07-10 08:46:17

回答

68

這似乎是因爲只有源代碼編譯時使用mvn clean compile(我使用maven 3.1.0,所以我不知道它是否總是這樣表現)。

如果運行mvn test,測試代碼也會編譯,但是它會運行測試(如果您試圖通過Eclipse運行測試,則測試代碼可能不會立即需要)。解決此問題的方法是添加test-compile到您的Maven命令序列,無論何時執行mvn clean。例如,您將運行mvn clean compile test-compile

+1

我曾經發生過這種情況,slomek的答案奏效了,然後又發生了同樣的錯誤,所以我不得不試試這個。它現在再次正常工作,所以爲了安全起見,你可能想要做這兩件事情。 – Roger 2014-09-22 14:20:27

+0

謝謝,它爲我工作。但在我的情況下,它不工作直到關閉並重新在eclipse中打開該項目。 – 2015-07-22 10:25:32

76

我也有類似的問題,我的測試,並在網絡的某處發現,你必須去到你的項目的屬性構建路徑和移動Maven依賴上述JRE系統庫。這似乎對我有效。

+0

謝謝解決了我的問題。當我嘗試運行它時,實際的測試得到了類未找到的錯誤。我認爲這可能是添加額外的mvn構建目標之前的首選步驟。 – Roger 2014-09-19 16:20:58

+5

此方法在[this](http://ihategeek.wordpress.com/2012/04/18/eclipse-junit-test-class-not-found/)文章中的屏幕截圖中描述(如果步驟不是 – nhylated 2014-11-19 08:25:16

+1

我無法在Eclipse Mars 2中移動JRE System Library上方的Maven Managed Dependencies,但是我可以右鍵單擊該項目並轉到Properties - > Builders,然後將Maven Project Builder移到Java Builder上方它爲我工作。 – xorcus 2016-03-29 21:43:08

1

此前,在這種情況下,我總是做mvn eclipse:eclipse並重新啓動我的Eclipse,它的工作。遷移到GIT後,它停止工作對我來說有點奇怪。

這裏的基本問題是Eclipse先生沒有找到編譯的類。 然後,我設置輸出文件夾作爲項目/目標/測試類,其是由mvn clean install生成的默認不跳過測試,並與下面的解決方法進行:

選項1:設置類路徑每個測試用例

選擇用戶條目 - >高級 - >添加文件夾 - >選擇 - >應用 - >運行

選項2:創建 - >運行 - >運行配置 - >在JUnit->選擇mytest-> classpath變量並將其包含在所有測試用例的classpath中

Eclipse - > W indows - >類路徑變量 - >新建 - > [名稱:Junit_test_cases_cp |路徑:] - > ok 然後轉到 Eclipse->運行 - >運行配置 - > JUnit->選擇mytest - >在classpath選項卡下 - >選擇用戶條目 - >高級 - >添加類路徑變量 - >選擇Junit_test_cases_cp->確定 - >應用 - >運行

這是在線嘗試所有建議後,當前唯一的工作。

0

我對調試Junits的Eclipse Helios有類似的問題。我的問題有點不同,因爲我能夠成功運行Junit,但是當調試相同的JUNIT時,我得到了ClassNotFoundException。

我已經嘗試了各種不同的解決方案可用在Stackoverflow.com和其他地方的論壇,但似乎沒有任何工作。在將這些問題敲了近兩天之後,我終於找到了解決方案。

如果沒有任何解決方案似乎可行,只需刪除工作區中創建的.metadata文件夾即可。這會導致額外的額外開銷,導入項目和你已經完成的各種配置,但是這些肯定會解決這些問題。

希望這些幫助。

-5

可能是你忘了放置Main類測試用例類在 /src目錄/ test/java下。檢查一次。

+1

java.lang.ClassNotFoundException在類已編譯但運行時由於classpath設置不正確而出現。 – 2015-08-04 13:02:14

15

我面臨同樣的問題,我可以使用@ slomek的answer修復它,但問題在此之後重新出現。

我最終通過將我的項目的輸出文件夾添加到JUnit測試的運行配置來修復它。步驟是:

  • 查找Project properties -> Java Build Path -> Default output folder
    • 項目的輸出文件夾通常這是<project-folder>/bin
  • 轉到Run -> Run Configurations...
  • 單擊的單元測試的運行配置,並單擊Classpath標籤
  • 在下明確添加項目的輸出文件夾- 即使項目已被列入有
    • 點擊Advanced -> Add folder添加輸出文件夾

這個問題可能是由於在Eclipse怪異的項目設置 - 如源文件夾嵌套maven項目導入爲一個單一的項目/文件夾(至少這是我的項目是如何設置的)。

+0

非常感謝你;我有這個問題。你的修復對我有效;前兩名沒有。上投了反對票。 – davtom 2015-04-07 15:27:32

+0

運行配置 - >類路徑有竅門。 – ulab 2017-08-09 12:42:45

+0

這一個作品,上面兩個沒有 – 2018-01-23 08:36:23

0

這些步驟對我很有幫助。

  • 刪除本地Maven倉庫的內容。
  • 運行mvn clean install在命令行中。 (cd到pom目錄)。
  • 在Eclipse中構建項目。
0

1 MVN日食:日食

2-項目清理所有項目

3-重啓

8

沒有改善這裏有什麼都試過之後,我解決我的問題僅通過。重新啓動Eclipse

3

在我的情況下,我有一個錯誤的maven目錄結構。

這應該是這樣的:

/src目錄/測試/ JAVA/ com.myproject。server.MyTest

當我解決這個問題 - 所有的東西都像魅力一樣。

6

如果僅在Eclipse中出現此問題,則在選定的項目上執行命令Project - > Clean ...可能會有所幫助。

1

在我的情況下,只有接下來的步驟幫助我解決這個問題:

  1. 項目 - >屬性 - >運行/調試設置。
  2. 在選擇類/「爲」 .....「啓動配置」項目
  3. 編輯 - >類路徑 - >‘還原默認項’
+0

謝謝!只有這一個幫助我! – sumandas 2017-11-08 13:25:12

0

值得一提的是另一種答案,如果你」重新使用eGit,並且你的類路徑得到更新,因爲像Clover這樣的測試覆蓋工具,有時候會出現一個清理呃逆,並不會完全刪除內容/path/to/git/repository/<project name>/bin/

本質上,我使用Eclipse的錯誤日誌視圖,在此清理工作中導致問題,導航到源目錄並手動刪除編輯<project name>/bin目錄。一旦完成,我回到Eclipse並刷新(F5)我的項目和錯誤消失。

0

檢查您的項目是否作爲Maven項目打開,而不僅僅是常規的Java項目。實際上,這是一件不容易的事情,但這與你可能錯過它的原因完全相同。

0

它也可能是由於「[錯誤]在這個環境中沒有提供編譯器,也許你正在運行JRE而不是JDK?」