簡體   English   中英

沒有使用測試運行器“JUnit 4”找到測試

[英]No tests found with test runner 'JUnit 4'

我的 Java 測試在 Eclipse 中運行良好。 但是現在,當我從運行菜單重新啟動測試時,我收到以下消息:

No tests found with test runner 'JUnit 4'

.classpath文件中,我有所有jar文件,最后有:

<classpathentry exported="true" kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
    <classpathentry kind="output" path="bin"/>
</classpath>

如何解決此錯誤並再次運行測試?

這只是發生在我身上。 重建或重新啟動 Eclipse 沒有幫助。

我通過將其中一種測試方法重命名為以“test...”(JUnit3 樣式)開頭來解決它,然后找到所有測試。 我將它重命名回原來的樣子,它仍然有效。

當我們得到這些錯誤時,Eclipse 似乎只是感到困惑。 重新啟動 Eclipse,刷新項目,清理它,讓 Eclipse 重建它,然后重試。 大多數時候,這就像一個魅力。

在“測試”目錄的上下文菜單中選擇“構建路徑”->“用作源文件夾”。 Eclipse 應該將您的 unitTests.java 文件視為源文件。 出現警告“未找到 JUnit 測試”,因為您的“構建”目錄中沒有 unitTests.class 文件

檢查您的測試類是否擴展了“TestCase”。 如果是這樣,請刪除該子句。 您的類不需要從“TestCase”類擴展。 這是我遇到的大多數情況。

public class MyTestCase extends TestCase{
  @Test
  public void checkSomething() {
    //...
  }
}
//Result> AssertionFailedError: No test Found in MyTestCase

遵循 TestCase 應該沒問題。

public class MyTestCase {
  @Test
  public void checkSomething() {
    //...
  }
}
//Works fine

我遇到了同樣的問題,我將它調試為網絡上的壞例子和junit的內部。 基本上不要像 Junit 4.x 的一些示例那樣讓您的類擴展 TestCase。 使用一些命名約定測試,或者如果你想有一個注釋,你可以使用@RunWith(JUnit4.class)。

如果您需要訪問斷言方法,請擴展 Assert 或使用靜態導入。

如果您的類擴展了 TestCase,那么即使您使用 Junit 4 Runner,它也會作為 3 運行。這是因為在初始化代碼中有檢測:

請參閱 JUnit3Builder 和以下行:

boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
}

這將返回 true,並且不會嘗試 junit4 兼容性測試。

嘗試添加

@Test 上面的測試方法是這樣的

@Test
public void testParse()
{

}

我將提出另一種可能的解決方案:我無法從編輯器窗口或包資源管理器運行測試類,但右鍵單擊大綱視圖中的類名並選擇 Run As JUnit測試確實有效......去圖!

這也發生在我身上。 我嘗試重新啟動 Eclipse,並在我的測試方法前面加上了測試。 都沒有奏效。

以下步驟有效:將@BeforeClass 和@AfterClass 中存在的所有測試方法更改為靜態方法。

即,如果您有以下格式的測試方法:

@BeforeClass
public void testBeforeClass(){
}

然后將其更改為:

@BeforeClass
public static void testBeforeClass(){
}

這對我有用。

我找到了答案:

當我從 Eclipse 獨立執行測試時出現此錯誤(右鍵單擊該方法並選擇作為 junit 測試運行),

當我作為 junit 測試執行完整的類時,測試使用參數正確執行。

JUnit4 中沒有測試套件。 請改用注釋或使用舊的 JUnit3 名稱約定。

例子:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})

當我遇到這個問題時,我只是編輯文件並保存它......就像魅​​力一樣

我的問題是聲明import org.junit.Test; 已消失(或未添加?)。 添加后,我不得不刪除另一個import聲明(Eclipse 會提示您是哪一個),然后一切又開始工作了。

很晚了,但為我解決問題的是我的測試方法名稱都以大寫字母開頭:“public void Test”。 使 t 小寫起作用。

我嘗試了德語的解決方案。 它適用於我班上的所有方法,但我的項目中有很多班。

所以我嘗試從構建路徑中刪除然后重新添加它。 它工作得很好。

希望能幫助到你。

六年后……Eclipse 仍然存在問題,偶爾找不到 JUnit。

在我的 Eclipse Mars 2 中,我發現如果文件中有超過 9 或 10 個@Test注釋,它將無法識別從 git 中提取的測試類。 我需要注釋掉任何額外的測試,運行測試類,然后取消注釋並重新運行該類。 去搞清楚...

解決我的問題的方法類似於@JamesG 的回答:我重新啟動了 Eclipse,重建了項目,然后刷新了它; 但在我這樣做之前,我首先關閉了項目(右鍵單擊包資源管理器中的項目->關閉項目),然后重新打開它。 然后它起作用了。

在找到剛剛描述的最終解決方案之前,我找到了一個解決方案:復制測試類,並將測試類作為 JUnit 運行。

檢查您的測試所在的文件夾是否是源文件夾。 如果沒有 - 右鍵單擊​​並用作源文件夾。

關閉並打開對我有用的項目。

可能是您的 JUnit 啟動配置是針對單個測試類的,而您以某種方式將該配置更改為“在源文件夾、包或項目中運行所有測試”

但這可能會觸發“沒有使用測試運行器'JUnit 4'找到測試”錯誤消息。

或者您在測試類中進行了修改,刪除了@Test注釋。
請參閱此wiki 頁面

還有一次機會,您可能已將 Junit Test 從較低版本(例如 Junit 3)更改為 Junit 4 。 請按照以下步驟操作:-

1. Right Click on class
2. Select Run as >> "Run Configurations"
3. Check your "Test Runner" option in new window
4. If it not same as maven change it for example change it as Junit 4.

右鍵單擊項目->構建依賴項->刪除已從構建路徑中排除的那些->單擊確定

右鍵單擊項目 -> Maven -> 更新項目。

你應該很高興去..

您可以通過執行以下操作來解決此問題:

  • 右鍵單擊名為“測試”的文件夾>構建路徑>用作源文件夾
  • 或者您可以將類路徑設置為: <classpathentry kind="src" path="src/test/java"/> 你用你的測試包替換“src/test/java”

發生此問題是因為 junit 無法識別您的源代碼:D

我最近遇到了這個問題,這似乎在最新的 Eclipse 中得到了修復。

eclipse-java 4.11.0,2019-03:R -> 4.12.0,2019-06:R

在您的測試之上添加@Test
鼠標懸停在注釋上。
選擇“將 junit 4 庫添加到類路徑”

我必須在命令行上執行 mvn clean,然后在 Eclipse 中執行 project->clean。 我事先重命名了該課程,然后將其重命名,但我懷疑這是否有幫助。

我也在用 Maven (m2e 1.4) 運行 Eclipse。 測試是使用 Maven 運行的,但不是使用 Eclipse 運行的……即使在多次應用Maven>Update project之后也是如此。

我的解決方案是在 m2e 生成的 .classpath 中添加一些行。 線條現在粘在一起。

<classpathentry kind="src" output="target/test-classes" path="src/test/java">
  <attributes>
    <attribute name="optional" value="true"/>
    <attribute name="maven.pomderived" value="true"/>
  </attributes>
</classpathentry>

你的 Eclipse 項目是基於 maven 的嗎? 如果是這樣,您可能需要更新 m2eclipse 版本。

快速說明:我在 Eclipse 中有一個基於 maven 的項目,最初是使用 Eclipse 中的“新 maven 項目”向導生成的。 我正在使用 JUnit 4.5 進行單元測試,並且可以很高興地使用 maven 從命令行運行測試,並使用 run as JUnit 測試從 Eclipse 中運行單個測試......但是,當我嘗試運行所有測試時通過在項目根節點上調用 run as JUnit test... 在項目中,Eclipse 抱怨“沒有使用測試運行器 junit 4 找到測試”。 通過從 m2eclipse 更新站點將 m2eclipse 升級到最新的穩定開發版本來解決(具體來說,我在 Eclipse Galileo 中從版本 0.9.8.200905041414 升級到版本 0.9.9.200907201116)。

從這里:http: //nuin.blogspot.com/2009/07/m2eclipse-and-junit4-no-tests-found.html

我不時有這個問題。 對我來說最能解決問題的是從運行配置運行 JUnit 測試......確保將 JUnit 4 設置為測試運行器。

通常,我在嘗試從包資源管理器的上下文菜單中運行時看到此問題... Junit 測試。 如果您右鍵單擊您嘗試運行的測試的代碼,而不是選擇 Run As... Junit Test 您選擇運行配置...確保正確設置項目、測試類和測試運行器,單擊應用,然后運行一直為我工作。

我開始在工作中使用 Selenium 和 Eclipse,我正在做我的第一個自動化測試,我從代碼中刪除了 @Before、@Test 和 @After 注釋,我遇到了這個問題“沒有使用測試運行程序 junit4 找到測試” .

我的解決方案是簡單地再次添加@Before、@Test 和@After 注釋,這樣我的腳本就可以工作了。 重要的是不要從代碼中刪除它。

這是一個使用 Google 搜索內容的簡單測試:

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class TestingClass {

    private WebDriver driver;
    //Creates an instance of the FirefoxDriver
    **@Before**
    public void SetUp() throws Exception {
        driver = new FirefoxDriver();
    }

    **@Test**   
    //Search using keyword through Google Search
    public void TestTestClass2 () throws Exception {
        driver.get("http://www.google.com.mx/");
        driver.findElement(By.name("q")).sendKeys("selenium");
        Thread.sleep(10000);
        driver.findElement(By.name("btnG")).click();
        Thread.sleep(10000);
    }

    //Kill all the WebDriver instances
    **@After**
    public void TearDown() throws Exception {
        driver.quit();
    }

}

使用 ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) 我在Right Click Scala Test Class-> Run As -> Scala Junit Test上下文菜單時遇到了類似的問題。

我嘗試編輯類(但不是因為編譯失敗)、清理、關閉項目、關閉 Eclipse。 這些都無法恢復以前運行良好的類的上下文菜單。 測試類不使用@Test注釋,而是使用 ScalaTest 代碼在類頂部使用@RunWith(classOf[JUnitRunner])注釋。

當我嘗試直接從 Run Configuration 啟動編輯器中選擇Scala Junit Test時,我收到了來自問題的對話框。 Footix29 的回答對我來說是關鍵。

我注意到,即使我已經清理了幾次我的項目,我在 /bin 目錄中的類實際上並沒有在一段時間內重新構建。

以下是我返回上下文菜單並能夠再次運行Scala Junit Test的方法:

  • 通過資源管理器刪除/bin/<package dir>* manually清理類
  • Project -> Clean編輯項目以及完整的重建

我懷疑一般的類編輯能夠清除一些已保存的 Eclipse 狀態並讓它再次運行。 在我的情況下,我嘗試過的所有以前的工作課程都失敗了,所以manual清潔步驟正是我需要的錘子。 但是,影響 Eclipse 的類路徑/構建狀態概念的其他技巧也應該起作用。

此外,我認為這種行為的部分原因是嘗試通過重命名來重構 Scala 類(Scala Eclipse IDE 很糟糕),其中初始文件更改后的所有清理都是手動的。 沒有構建錯誤,但也沒有我期望的警告,這意味着某些東西肯定卡在了 Eclipse 的構建狀態信息中。

這也發生在我身上。 我發現在 Eclipse 中我沒有創建一個新的 Java 類文件,所以這就是它沒有編譯的原因。 嘗試將您的代碼復制到 java 類文件中,如果它還沒有,然后編譯。

我的問題是使用**

測試

** 包 org.testng.Assert;

您可以用 JUnit 在項目( Maven )的庫中替換它,然后需要重構項目。
或者添加 TestNG Eclipse 插件

http://testng.org/doc/eclipse.html

當我的 Java 類名與 Test 類名相似時,我遇到了這個問題。 剛剛更新了測試類的名稱,通過使用密鑰“測試”對其進行后期修復,它開始工作

之前: Java 類:ACMEController 測試類:ACMEController

之后: Java 類:ACMEController 測試類:ACMEControllerTest

我發現如果您的測試類從TestCase擴展,Eclipse 似乎只執行 JUnit 3 樣式測試。 如果您刪除繼承,注釋對我有用。

請注意,您需要靜態導入所有必需的assert*方法,例如import static org.junit.Assert.*

就我而言,問題是泛型參數:

public class TestClass<T extends Serializable> {

刪除

<T 擴展可序列化>

並且該選項再次可用。

我正在使用 Junit4

您可以簡單地通過重命名您的測試類以具有以 Test 結尾的名稱來解決這個問題,例如 ThisAndThatTest

檢查更新! 考慮到已經提出了多少變通方法,Eclipse 無疑完全意識到了這個問題。 顯然有一些系統性的東西……一些無法解釋或任何一致性的東西。 如果 Eclipse 能讓社區知道問題是什么以及如何解決它,那將會很有用。

我最近的另一個發現是刪除任何沒有文件或所有文件都被排除在外的源目錄。

我在運行 JUnit 測試時也遇到了同樣的問題。 我通過將注釋 @Test 放在主測試函數上方來解決這個問題。

如果您確定它曾經可以工作,但現在不再工作,那么 Java 索引很可能已損壞。 在首選項中,搜索“java index”; 它在“Java”中,然后有一個“重建索引”按鈕(或使用 Ctrl+3,“查找操作”,快速搜索“重建 Java 索引”)。 選擇后,下次嘗試運行 JUnit 測試時,您應該會看到 Eclipse 正在重建 Java 索引,並且 JUnit 測試現在應該開始。

我遇到了這個問題,因為我有一個不是靜態的 @BeforeClass。

由於某種原因,該錯誤沒有通過我的正常 junit 運行配置暴露出來。

我嘗試了上面的所有答案。

就我而言,我的項目同時具有 junit4 和 junit5 依賴項。 我試圖使用junit4,所以在確保我使用了正確的junit4導入之后它仍然不起作用。

我終於找到了問題所在。 調試配置中使用的 eclipse JUnit 運行器設置為 JUnit5。 我將其更改為 JUnit4,現在可以找到並執行測試。

使用 JUnit4 和基於 Gradle 的項目,之前的建議都不適用於我的情況。 起作用的

  1. 右鍵單擊您的test源文件夾,然后單擊Properties
  2. 跳轉到Run/Debug Settings
  3. 選擇所有運行/調試配置,然后刪除它們。

我的猜測是這些啟動配置之一弄亂了我的 JUnit4 運行器。 重置所有運行/調試配置解決了 JUnit4 找不到任何要運行的測試。

我嘗試了上面的所有建議。 僅刪除該類的現有測試運行配置最終解決了它。 日食很奇怪...

好的在我的情況下(使用Junit5),如果我試圖運行

@RunWith(MockitoJUnitRunner::class)

我有錯誤

No tests found in ServiceImplTest
Is the method annotated with @Test?
Is the method public?
org.mockito.exceptions.base.MockitoException: 

No tests found in ServiceImplTest
Is the method annotated with @Test?
Is the method public?

解決方案:只需從 Top of class 中刪除 @RunWith(MockitoJUnitRunner::class) 即可!

這個異常有兩個原因:

  1. 源代碼尚未編譯。
  2. 或者相反,源代碼已經編譯,但 JUnit 找不到。

原因一,它沒有腿可以站立。 因為就像許多人所說的那樣:“舊”方法非常有效。 只有新增的方法無法識別。 然后第二個原因變成了唯一的解釋:JUnit 找不到新編譯的類。 考慮到這一點,我這樣做了:右鍵單擊項目 -> Java 構建路徑 -> 編輯源項:project_name/src/test/java 的輸出文件夾,將輸出文件夾更改為“特定輸出文件夾(相對於項目名稱的路徑) . 提供此值:目標/測試類。 請注意:這是 Maven 定義的默認測試源代碼的輸出文件夾。 它已被 M2E(或我)覆蓋。 這就是 JUnit 找不到它的原因。 所以我的猜測是許多遇到這個可愛異常的人很可能正在處理一個由 Maven 管理的 Web 項目。 我對嗎?! 這也促成了我的結論,即應該排除一個原因 - 可以找到“舊”方法是因為它們在 Tomcat 重新啟動時已自動編譯。 也許進入了“錯誤”的路徑,但 JUnit 還是找到了它。

在我弄清楚這一點之前。 我按照建議嘗試了很多事情:更新到最新的 JUnit4、在構建路徑和用作源文件夾之間來回切換、大寫測試與測試等。在我明確確定測試源的輸出位置之前,什么都沒有發生。 有了這些解釋,我的第二個原因應該重新表述為:新代碼沒有及時編譯到正確的路徑! 祝你好運。

我在實現@RunWith(Cucumber.class) 時也遇到了這個問題。 由於此注釋位於公共類中,因此 Eclipse 顯示此“未找到測試運行程序的測試”錯誤。

一旦我在運行器類之前調用​​/放置了測試運行器注釋,測試就會很好地顯示出來。

讀者必須確定他們正在使用哪個 Junit Test Runner。 可以使用@RunWith(JUnit4.class) 檢查是在 runner.class 括號 {} 的外部還是內部。 如果在里面,請放在外面。

如果您嘗試設置junit 5添加@RunWith(JUnitPlatform.class)

import org.junit.platform.runner.JUnitPlatform; 以便eclipse可以將junit 5測試類識別為測試類

暫無
暫無

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

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