簡體   English   中英

運行 JUnit 測試時找不到類異常

[英]Class Not Found Exception when running JUnit test

在 Eclipse 中運行 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)

盡管我使用的是 Maven,但我嘗試在類路徑中添加JUnit庫,並且 JUnit 庫位於 POM 依賴項中。

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

這似乎是因為當您使用mvn clean compile時只有源代碼在編譯(我使用的是 maven 3.1.0,所以我不確定它是否總是表現得像這樣)。

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

我的測試遇到了類似的問題,並在 Web 的某個地方發現,您必須轉到項目屬性中的Build Path並將Maven Dependencies移動到JRE System Library之上。 這似乎對我有用。

我遇到了同樣的問題,我能夠使用@slomek 的答案修復它,但此后問題又出現了。

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

  • Project properties -> Java Build Path -> Default output folder找到項目的輸出文件夾
    • 通常這是<project-folder>/bin
  • 轉到Run -> Run Configurations...
  • 單擊單元測試的運行配置,然后單擊Classpath選項卡
  • User Entries下明確添加項目的輸出文件夾 - 即使項目已經包含在那里
    • 點擊Advanced -> Add folder添加輸出文件夾

這個問題可能是由於 Eclipse 中奇怪的項目設置引起的——例如,帶有作為單個項目/文件夾導入的嵌套 Maven 項目的源文件夾(至少我的項目是這樣設置的)。

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

在沒有任何改進的情況下嘗試了這里的一切之后,我通過重新啟動 Eclipse 解決了我的問題

我通過運行 maven 更新解決了我的問題。 右鍵單擊項目你的項目> Maven > 更新項目

在我的例子中,我有一個錯誤的 maven 目錄結構。

應該是這樣的:

/src/test/java/com.myproject.server.MyTest

在我修好之后 - 一切都很順利。

就我而言,只有后續步驟幫助我解決了這個問題:

  1. 項目->屬性->運行/調試設置。
  2. 在“'.....'的啟動配置”中選擇類/項目
  3. 編輯 -> 類路徑 -> “恢復默認條目”

早些時候,在這種情況下,我總是執行 mvn eclipse:eclipse並重新啟動我的 Eclipse 並且它起作用了。 遷移到 GIT 后,它不再為我工作,這有點奇怪。

這里的基本問題是 Eclipse 先生沒有找到已編譯的類。 然后,我將輸出文件夾設置為 Project/target/test-classes,默認情況下由mvn clean install生成而不跳過測試,並繼續執行以下解決方法:

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

Eclipse ->Run ->Run Configurations ->JUnit下->select mytest ->classpath選項卡下->Select User Entries->Advanced->Add Folder ->Select ->Apply->Run

選項 2:創建類路徑變量並將其包含在所有測試用例的類路徑中

Eclipse ->Windows ->類路徑變量 ->新建->[名稱:Junit_test_cases_cp | path: ]->ok 然后去Eclipse->Run ->Run Configurations ->JUnit->select mytest ->under classpath tab ->Select User Entries->Advanced->Add classpath variables->Select Junit_test_cases_cp->ok- >應用->運行

在網上嘗試了所有建議后,這是目前唯一對我有用的東西。

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

我在 Stackoverflow.com 和其他地方的論壇上嘗試了各種不同的解決方案,但似乎沒有任何效果。 在為這些問題苦苦思索了將近兩天之后,我終於找到了解決方案。

如果所有解決方案似乎都不起作用,只需刪除在您的工作區中創建的 .metadata 文件夾。 這會產生額外的導入項目和您已完成的各種配置的開銷,但這些肯定會解決這些問題。

希望這些有幫助。

NoClassDefFoundError 實際上意味着它無法初始化該類。 它與查找課程無關 在空字符串上調用 trim() 時出現此錯誤。

JUnit 不會顯示 NullPointerException。 正常運行時該字符串不為空,因為我正在從不可用於測試的屬性文件中獲取該字符串。

我的建議是在你的測試開始通過之前從課堂上刪除一些片段。 然后您可以確定哪一行給出了錯誤。

就我而言,從構建路徑配置更改 Maven 依賴項的順序對我不起作用。 我從運行配置更改了它的順序。
按着這些次序:
• 轉到運行 -> 運行配置...
• 單擊單元測試的運行配置,然后單擊類路徑選項卡。
• 選中使用臨時 JAR 指定類路徑(以避免類路徑長度限制)。
可能就足夠了,您的測試有效。 你應該試試,所以按運行按鈕。 如果它不起作用。 再次按照前面的所有步驟操作,不要按“運行”按鈕,轉到下一步。
• 在用戶條目的子分支中,將Maven 依賴項移動到您的項目或測試類之上。
• 單擊運行按鈕。

這些步驟對我有用。

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

1- mvn 日食:月食

2-項目清理所有項目

3-重新啟動

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

本質上,我使用了 Eclipse 的錯誤日志視圖,確定了在此清理過程中導致問題的原因,導航到源目錄,並手動刪除了<project name>/bin目錄。 完成后,我回到 Eclipse 並刷新 ( F5 ) 我的項目,錯誤消失了。

也可能是由於“[ERROR] 在此環境中未提供編譯器。也許您正在 JRE 而不是 JDK 上運行?”

我在 Gradle 項目中遇到了同樣的問題,該項目具有帶有兩個資源目錄的測試 SourceSet。

此代碼段來自 main-module.gradle 並將資源目錄添加到測試 SourceSet:

sourceSets {
    test {
        resources {
            srcDir('../other-module/src/test/resources')
        }
    }
}

這樣做我有兩個與項目主模塊的測試 SourceSet 相關的資源目錄:

../other-module/src/test/resources src/test/resources(相對於main-module文件夾,java插件自動添加)

我發現如果我在兩個源目錄中有兩個同名的文件,那么進程資源階段就會出錯。 結果,沒有開始編譯,因此 no.class 被復制到 JUnit 尋找類的 bin 目錄中。 ClassNotFoundException 消失只是重命名兩個文件之一。

似乎是編譯問題。 將項目作為 Maven 測試運行,然后作為 JUnit 測試運行。

對於不使用 Maven 的項目:這對我有用https://ihategeek.wordpress.com/2012/04/18/eclipse-junit-test-class-not-found/

在 Order 的底部添加 jre 和 project src,並在 build path 中導出

請檢查您是否添加了 junit4 作為依賴項。

例如

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
</dependency>

對我來說,我不得不將項目 x/src/test/java/ 放在“java build path”中“order and export”的底部

在此處輸入圖像描述

檢查您的項目是否作為 Maven 項目打開,而不僅僅是普通的 Java 項目。 實際上很容易,但這正是您可能錯過它的原因。

我遇到過同樣的問題。 我通過刪除外部 JUnit jar 依賴項來解決它,該依賴項是我從外部從 Internet 下載添加的。 但后來我去了項目->屬性->構建路徑->添加庫->junit->選擇版本(ex junit4)->應用。

它自動添加了依賴項。 它解決了我的問題。

進行一些虛擬更改並保存測試類可以解決問題。 它會自動構建.class

可能是您忘記將Main 類Test Case 類放在 /src/test/java 中。 檢查一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM