簡體   English   中英

JUNIT 在 Eclipse 中測試 class - Z93F725A07423FE1C889F448B33D21F4

[英]JUNIT Test class in Eclipse - java.lang.ClassNotFoundException

我正在嘗試運行我的 junit 測試(以驗證屬性文件是否正確加載)但我得到ClassNotFoundException盡管 class 在那里並且所有必需的庫也在那里。

這是我得到的錯誤:

Class not found ConfigurationManagerTest                                                 java.lang.ClassNotFoundException: ConfigurationManagerTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    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)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

有想法該怎么解決這個嗎?

謝謝。

在您的類路徑中找不到ConfigurationManagerTest 確保ConfigurationManagerTest.class文件在您的類路徑上可用。

如果它沒有被成功編譯,或者如果它是在您沒有告訴 Eclipse 項目應該在類路徑上的目錄中創建的,它可能不存在。

假設您已將測試類放在單獨的文件夾中,請確保它顯示在“Package Explorer”視圖(而不是“Navigator”視圖)中。

在項目屬性、“Java 構建路徑”和“源”選項卡下,您還可以查看是否包含用於構建的源文件夾以及 .class 文件的生成位置。

還有一種可能。 我剛才遇到了同樣的問題,這里的任何解決方案都沒有幫助。 除了刪除和重新創建項目 - 我不想嘗試。 有什么幫助,是立即一個接一個地清理項目兩次 Clean + build 可以重復任意次 - 它無濟於事。 只有干凈+干凈,然后構建就可以了。 (日食 3.6)。 當然,您應該為此禁用自動構建。

編輯:這篇文章在 2017 年 11 月 15 日獲得了最后一次加分。 因此,問題(和解決方案)仍然存在。

另一個可能的問題是缺少構建器(它會阻止構建您的 .class 文件)。

檢查您的 .project 文件是否包含以下幾行

<buildSpec>
  <buildCommand>
    <name>org.eclipse.jdt.core.javabuilder</name>
    <arguments>
    </arguments>
  </buildCommand>
</buildSpec>
<natures>
  <nature>org.eclipse.jdt.core.javanature</nature>
</natures>

當我將測試類拖放到不同的包時,這發生在我身上。 我只是做了以下

  1. 將課程保存在文本編輯器中。
  2. 從 eclipse 項目資源管理器中刪除了違規類。
  3. 重新創建了類。

答對了! 我現在可以運行測試了!

我遇到了這個問題,意識到出了什么問題有點棘手。 該項目有一個存在錯誤的依賴項目,導致構建無法執行。 當我刪除這個依賴問題時,項目就按預期構建了。

Ps.:我在做一個編譯錯誤很多的項目,因為我們正在移植一個從Delphi轉換成Java的應用程序,所以一開始我並沒有在意編譯錯誤,這就是為什么我花了一些時間找出問題所在。

我嘗試了此處描述的所有答案,但都沒有奏效,但發現此線程中 slomek 以非常簡單的方式解決了問題。 只需轉到項目-> 屬性-> java 構建路徑。 然后通過向右擊中上底部將 Junit 移動到頂部。 然后一切都編譯得很好。

檢查屬性-> java 構建路徑-> 庫。 應該沒有錯誤,就我而言,maven 中有錯誤。 一旦我將所需的 jar 放入 maven repo 中,它就可以正常工作

我嘗試了這里和其他帖子中提到的所有內容。 人們提供的一些解決方案是:

  1. 更改測試的輸出文件夾
  2. 為將從 Maven 運行測試編譯的項目創建自定義構建器
  3. 將 Maven 依賴項在項目構建路徑中的 Order and Export 列表中移至更高的位置

還有很多很多,但我發現可以使用的方法如下: 關閉開發環境。 從我的本地 Maven 存儲庫中刪除項目使用的 jar。 打開 IDE。 構建項目。 運行測試。

經過數小時的敲擊鍵盤並遵循建議的解決方案后,這個方法奏效了!

對我有用的是刪除測試的運行配置。 然后右鍵單擊 testclass 並單擊 run as junit test。

現在它為我重新創建了一個正確的運行配置。

這可以展開的另一種方式(對我來說也是如此)是,如果您有一個 Eclipse 沒有告訴您的構建錯誤。 如果編譯單元測試失敗,則沒有 .class 文件,您將收到 ClassNotFoundException。

就我而言,缺少第 3 方 jar 文件。 當我運行測試時,我看到一個彈出窗口,上面寫着“所需項目中存在錯誤”。 我與一個龐大的項目一起工作,我總是收到這條消息,因為有些源代碼無法用於 eclipse(長篇故事)。 它也沒有說明錯誤是什么。 所以我點擊“繼續”,然后我得到了異常。

一旦我意識到發生了什么,就可以通過將缺少的 jar 添加到 Run -> Debug Configurations 下的類路徑來輕松修復...

我不知道如何最好地檢測或防止這種情況發生,除非在出現問題時意識到這種可能性並檢查您最近的更改以了解可能出現的問題。

上面蓋伊答案的變體,涉及額外的構建器。 假設您配置了一個 Ant 構建器:

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
        <arguments>
            <dictionary>
                <key>LaunchConfigHandle</key>
                <value>&lt;project&gt;/.externalToolBuilders/myprojectantlaunch.launch</value>
            </dictionary>
        </arguments>
    </buildCommand>
</buildSpec>

如果 Ant 構建和 Eclipse 構建具有不同的輸出位置,Eclipse 可能無法在類路徑上定位測試類。 對於 Ant 構建器,還要檢查已配置的干凈、自動、手動和清理后構建的目標,以確保調用構建單元測試的目標。

我添加這個答案作為我上面的解決方案評論。

  1. 您只需編輯主項目文件夾中的.project文件。 使用適當的 XML 編輯器,否則您將從 Eclipse 收到fatal error ,統計您無法打開此項目。
  2. 我通過將這個<nature>org.eclipse.jdt.core.javanature</nature><natures></natures>來使我的項目自然Java
  3. 然后我將這些行正確縮進<buildCommand><name>org.eclipse.jdt.core.javabuilder</name><arguments></arguments></buildCommand><buildSpec></buildSpec>
  4. Run as JUnit ...成功

在資源管理器中右擊項目:Build Path -> Order and Export -> Select JRE System Library [jdk] 然后點擊Bottom按鈕。

又一個變種。
不知何故,我以前工作的測試類似乎是從其他位置運行的; 當我運行測試時,我的編輯不會執行。

我發現 ${project_loc}src/test/java 文件的輸出文件夾不是我所期望的。 它無意中被設置為 ${project_loc}target/classes。 我在項目屬性、Java 構建路徑、源選項卡中正確設置了它。

如果您有一個 Maven 項目,請嘗試運行:

mvn clean compile

然后在 Eclipse 中清理並構建您的項目。

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

我已經嘗試了 Stackoverflow.com 和其他地方的論壇中提供的各種不同的解決方案,但似乎沒有任何效果。 在用這些問題困擾我近兩天后,我終於找到了解決方案。

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

希望這些有幫助。

在“包資源管理器”視圖中,右鍵單擊您的測試類,然后“構建路徑”>>“包含”,應該就可以了。

我也面臨同樣的例外,互聯網上的解決方案都沒有幫助我。 我的項目包含多個模塊。 我的 Junit 代碼駐留在 Web 模塊中。 它指的是客戶端模塊的代碼。

最后,我嘗試:右鍵單擊(Web 模塊)項目--> 構建路徑--> 源選項卡--> 鏈接源--> 添加 src 文件位置(客戶端模塊的)

就是這樣! 它就像一個魅力希望它有幫助

我收到此錯誤是因為我最近創建了一個新工作區並且我的“已安裝的 JRE”設置不正確。 確保在Preferences -> Java -> Installed JREs中選擇了 JDK 的根文件夾。 由於某種原因,我在新工作區中的默認設置是 JRE。

我知道很久以前就已經回答了這個問題,但答案並沒有為我解決這個問題,但是,我只是從構建路徑設置中的源中刪除了所有內容並重新添加了它們

我遇到了這個問題,在我的情況下,問題依賴於編譯,我使用的是 maven 並且測試類沒有編譯。

我通過執行 maven 安裝(它編譯所有文件)修復了它,您也可以檢查其他原因,避免測試編譯,就像您的“運行配置”跳過測試以節省時間一樣。

  • 假設您嘗試了所有合理的方法(刪除目標、刷新、清理、重建、maven 安裝...)並且您意識到 Eclipse 的行為不合理...
  • 現在:檢查是否沒有錯誤表明它可以是與測試有關的插件(任何插件)。

  • 就我而言:

    • 我刪除了 EclEmma。
    • 它開始工作...

花了幾個小時試圖猜測它!。

請確保Java Build Path選項卡中的輸出文件夾設置如下,這將確定 .class 文件的生成位置。然后清理項目。

在此處輸入圖片說明

您確定您的測試類在 build 文件夾中嗎? 您在單獨的 JVM (fork=true) 中調用 junit,因此在調用期間工作文件夾可能會發生變化,並且構建是相對的,這可能會導致問題。

使用 -verbose 或 -debug 開關從命令行(而不是 Eclipse)運行 ant 以查看正在調用 junit 的詳細類路徑/工作目錄,如果您仍然無法解決此問題,請將結果發回此處。

上面提到的解決方案對我不起作用。

我只是通過關閉並重新打開它來重新啟動我的 IDE。

然后錯誤消失了,現在工作正常。

您可能需要結合上述操作來解決此問題。 當我這樣做時,我通常會收到此錯誤

mvn clean install

並看到編譯錯誤阻止我的測試完全編譯。

假設以上解決的問題已經解決,嘗試點擊項目,清理,清理包含你要運行的測試的項目。 還要確保選中自動構建。

I also faced similar issue as mention in comment below.
    
    **org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:766)**
    
Check all mention possibility above but still could not find root cause why test case not getting execute.
Then I found that there is one package issue in my class. So due to that I was getting compilation error in my Test class. 
Reason is quite simple, Due to compilation error class did not compile and could not create class file. 
I fixed that compilation error and executed that Test class and its run successfully.

暫無
暫無

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

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