No tests found with test runner 'JUnit 4'

我的 Java 测试在 Eclipse 中运行良好。但是现在,当我从 run 菜单重新启动 test 时,我得到以下消息:

No tests found with test runner 'JUnit 4'

In the .classpath file I have all jar files, and at the end have:

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

如何解决此错误并重新运行测试?

268868 次浏览

您的 Eclipse 项目是基于专家的吗? 如果是的话,您可能需要更新 m2eclipse 版本。

只是一个简短的说明: 我有一个项目在 Eclipse which is maven-based, and 最初使用「新的 在 Eclipse 中的“ maven 项目”向导 使用 JUnit 4.5进行单元测试, and could quite happily run the tests 从命令行使用 maven,并且 来自 Eclipse 的单个测试,使用 运行为 JUnit 测试... 。然而,当我 试图运行所有的测试 通过调用以 JUnit 方式运行的 测试... 在项目根节点上, Eclipse 抱怨”< strong > 没有发现测试 与测试运行器 junit 4 ”解决 upgrading m2eclipse to the latest 稳定的发展 M2eclipse 更新站点(具体来说,我 从版本升级 0.9.8.200905041414至 Eclipse Galileo 版本0.9.9.200907201116)。

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

可能您的 JUnit 启动配置是针对单个测试类的,并且您以某种方式将该配置更改为“在源文件夹、包或项目中运行所有测试”

但是这可能会触发“ No test found with test runner‘ JUnit 4’”错误消息。

Or you did a modification in your test class, removing the @Test annotation.
看这个 wiki page

When we get these errors it seems like Eclipse is just confused. Restart Eclipse, refresh the project, clean it, let Eclipse rebuild it, and try again. Most times that works like a charm.

重建或重新启动 Eclipse 对我没有帮助。

我通过将其中一个测试方法重命名为以“ test...”(JUnit3样式)开始,然后找到 所有测试来解决这个问题。我把它重新命名为以前的名字,它仍然可以工作。

我尝试了 Germán 的解决方案。 它工作的所有方法从我的类,但我有很多类在我的项目。

因此,我尝试从构建路径中删除,然后重新添加它。 效果很好。

希望能有帮助。

这也发生在我身上。我发现在 Eclipse 中我没有创建一个新的 JavaClass 文件,这就是为什么它没有编译的原因。尝试将代码复制到一个 java 类文件中(如果还没有) ,然后进行编译。

我也遇到了同样的问题,我把它调试成了 web 和 junit 内部的坏例子。基本上不要让您的类像 Junit 4.x 的一些示例那样扩展 TestCase。使用一些变数命名原则 测试或者如果你想要一个注释,你可以使用@RunWith (JUnit4.class)。

如果需要访问断言方法,请扩展 Assert 或使用静态导入。

如果您的类扩展了 TestCase,那么即使您使用 Junit4Runner,它也将以3的形式运行。这是因为在初始化代码中有检测:

参见 JUnit3Builder 及其代码行:

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

这将返回 true,并且不会尝试 junit4兼容性测试。

检查您的测试类是否扩展了“ 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

在“ test”目录的上下文菜单中,选择“ Build path”-> “ Use as a source file”。 Eclipse 应该将 unitTests.java 文件视为源文件。 警告“未发现 JUnit 测试”,因为在“ build”目录中没有 unitTests.class 文件

我发现 Eclipse 似乎只在测试类从 TestCase扩展时才执行 JUnit 3样式测试。如果您删除了继承,那么注释对我来说是有效的。

请注意,您需要静态导入所有必需的 assert*方法,如 import static org.junit.Assert.*

我在运行 JUnit 测试时也遇到了同样的问题。我通过将注释@Test 放在主测试函数的上方来解决这个问题。

No testsuits in JUnit4. Use annotations instead or use old JUnit3 name conventions.

例如:

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

我必须在命令行上执行 mvn clean,然后在 eclipse 中执行 project-> clean。我事先重新命名了这个班级,然后又重新命名了,但我怀疑这是否有帮助。

修复我的情况与@JamesG 的回答类似: 我重新启动 Eclipse,重建项目,然后刷新它; 但是在我做这些之前,我首先关闭项目(在包资源管理器中右键单击项目-> 关闭项目) ,然后重新打开它。那就成功了。

在找到我刚才描述的最终解决方案之前,我找到了一个解决方案: 复制测试类,并以 JUnit 的形式运行测试类。

当我面对这个问题,我只是编辑文件和保存它... 像魅力工程

这种情况也发生在我身上。我尝试重新启动 Eclipse,并在测试方法前面加上测试。但都没有用。

下面的步骤奏效了: 将@BeforeClass 和@AfterClass 中的所有测试方法更改为静态方法。

例如,如果你有你的测试方法在下面的格式:

@BeforeClass
public void testBeforeClass(){
}

然后改成:

@BeforeClass
public static void testBeforeClass(){
}

这招对我很管用。

尝试添加

@ Test above the method for the test like this

@Test
public void testParse()
{


}

My problem was that declaration import org.junit.Test; has disappeared (or wasn't added?). After adding it, I had to remove another import declaration (Eclipse'll hint you which one) and everything began to work again.

虽然很晚,但对我来说解决这个问题的方法是我的测试方法名都以大写字母开头: “ public void Test”。T 小写起作用了。

检查测试所在的文件夹是否为源文件夹。如果不是右键单击并用作源文件夹。

我还使用 Maven 运行 Eclipse (m2e 1.4)。这些测试是用 Maven 运行的,但不是用 Eclipse 运行的... ... 即使在多次应用 Maven>Update project之后也是如此。

我的解决方案是在 m2e 生成的.classspath 中添加一些行。

<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 独立执行测试时得到了这个错误(右键单击该方法并选择作为 junit 测试运行) ,

当我以 junit 测试的方式执行完整的类时,使用参数正确地执行了测试。

关闭和开放的项目为我工作。

我时不时会遇到这个问题。对我来说,最能解决问题的是从 Run 配置运行 JUnit 测试... ... 确保将 JUnit 4设置为测试运行程序。

通常,在尝试从 PackageExplorer 的上下文菜单运行... Junit 测试时,我会看到这个问题。如果你右键单击你要运行的测试的代码,而不是选择 Run As... Junit Test,你选择 Run configuration... 确保项目、测试类和测试运行器设置正确,单击 application,然后为我运行所有的时间。

还有另一个可能的解决方案: 我不能从编辑器窗口或者 Package Explorer 运行测试类,但是右键单击大纲视图中的类名并选择 Run As JUnit Test 确实有效... ... 想想吧!

我开始在我的工作中使用 Selenium 和 Eclipse,当时我正在做我的第一个自动化测试,我从代码@Before,@Test 和@After 中删除了注释,我遇到了这样一个问题: “ No test found with test runner junit4”。

我的解决方案是再次添加“ Before”、“ Test”和“ After”注释,这样我的脚本就可以工作了。重要的是不要从代码中删除它。

这是一个简单的测试,使用谷歌搜索一些东西:

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-Type-safe)我在使用 Right Click Scala Test Class-> Run As -> Scala Junit Test上下文菜单时遇到了类似的问题。

I tried editting the class(but not for a compile failure), cleaning, closing the project, closing Eclipse. None of those worked to restore the context menu for classes that had previously worked well. The test classes don't use the @Test annotation and instead use the @RunWith(classOf[JUnitRunner]) annotation at the top of the class using ScalaTest code.

当我试图从 Run Configuration 启动编辑器中直接选择 Scala Junit Test时,我收到了问题的对话框。Footix29的答案是我的关键。

我注意到,尽管我已经清理了几次项目,但是/bin 目录中的类实际上有一段时间没有被重新构建。

下面是我如何得到上下文菜单,并能够再次运行 Scala Junit Tests:

  • manually cleaned the classes by deleting the /bin/<package dir>* via Explorer
  • 随着一个完整的重建项目

我怀疑类编辑通常能够清理 Eclipse 的某些保存状态,并使其重新运行。在我的情况下,所有以前的工作类,我尝试失败,所以 manual干净的步骤正是我需要的锤子。但是,影响 Eclipse 的类路径/构建状态概念的其他技巧也应该起作用。

此外,我认为这种行为部分是由于试图通过重命名一个 Scala 类(Scala Eclipse IDE 对此很不擅长)来重构它,在这种情况下,初始文件更改后的所有清理工作都是手动的。没有构建错误,但是也没有任何警告,说明我预期的某些东西肯定会卡在 Eclipse 的构建状态信息中。

还有一个机会,您可能已经将 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.

右键单击项目-> 构建依赖项-> 删除构建路径中被排除的依赖项-> 单击确定

右键单击 Project-> Maven-> Update Project。

你应该可以走了。

你可以通过以下方法解决这个问题:

  • 右键单击名为“ Test”> Build Path > Use as Source 的文件夹 文件夹
  • 或者可以将类路径设置为: < code > < classspathentry kind = “ src” path="src/test/java"/> . You replace “ src/test/java” by your test package

这个问题的发生是因为 junit 无法识别您的源代码: D

六年后... Eclipse 仍然存在问题,偶尔也会找不到 JUnit。

在我的 Eclipse Mars 2中,我发现如果文件中有超过9或10个 @Test注释,它就不能识别从 git 中提取的测试类。我需要注释掉任何额外的测试,运行测试类,然后取消注释并重新运行该类。想想看..。

这种例外有两个原因:

  1. 源代码还没有被编译。
  2. 相反,源代码已经被编译,但是 JUnit 无法找到它。

原因之一,它没有立足之地。因为就像很多人说的: “旧的”方法完美地工作。只有新添加的方法无法识别。 Then the second reason became the only explanation: JUnit can NOT find the freshly compiled classes. 考虑到这一点,我这样做了: 右键单击项目-> Java Build Path-> 编辑源代码项: project_name/src/test/java’s Output folder, change the Output folder into a ‘Specific output folder(path relative to project_name). Provide this value: target/test-class. 保持: 这是 Maven 定义的默认测试源代码输出文件夹。它已被 M2E (或我)覆盖。这就是为什么 JUnit 找不到它。 所以我猜想,许多遇到这个可爱异常的人最有可能处理的是由 Maven 管理的 Web 项目。我说的对吗!这也促成了我的结论,即应该排除一个方法的原因——可以找到“旧”方法是因为它们在 Tomcat (重新)启动时已经被自动编译。也许进入了“错误”的路径,但 JUnit 还是找到了它。

Before I had figured this out. I tried many things as advised: update to the latest JUnit4, Back and forth between build path and use as source folder, capital Test vs test, etc. Nothing happened until I specifically identified the output location for the test source. 有了这些解释,我的第二个理由应该重新措辞为: 新的代码没有及时编译到正确的路径! 祝你好运。

我在实现@RunWith (Cucumber.class)时也遇到了这个问题。 因为这个注释在一个 Public 类中,因此 Eclipse 显示了这个“没有找到测试运行程序的测试”错误。

一旦我在运行程序类之前调用/放置了测试运行程序注释,测试就会很好地显示出来。

Readers must identify which Junit Test Runner they are using. One can check with @RunWith(JUnit4.class) is Outside or inside the runner.class parenthesis {}. If its inside, Please place it outside.

如果您试图设置 < strong > junit 5 加入 @RunWith(JUnitPlatform.class)

以及 import org.junit.platform.runner.JUnitPlatform;,这样 Eclipse 就可以将 junit 5测试类识别为测试类

我的问题就是用了这个

测试

** package 断言;

您可以在项目库(玛文)中用 JUnit 替换它,然后需要重构项目。
OR add TestNG Eclipse plug-in

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

我最近在这方面遇到了一些问题,这些问题似乎在最新的 Eclipse 中得到了修复。

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

当我的 Java 类名与 Test 类名相似时,我遇到了这个问题。只是更新了名称的测试类后固定与关键工作“测试”,它开始工作

以前: Java 类: ACMEController 测试类: ACMEController

之后: Java 类: ACMEController Test class : ACMEControllerTest

Add @Test on top of your test.
鼠标悬停到注释。
选择‘ add junit 4 library to classspath’

在我的案例中,问题在于泛型参数:

public class TestClass<T extends Serializable> {

removing :

< T 扩展序列化 >

and the option was available again.

我在用 Junit4

您可以通过将测试类重命名为以 Test 结尾的名称来解决这个问题,例如 ThisAndThatTest

Check for updates! Eclipse is no doubt fully aware of this problem considering how many workarounds have been presented. There is obviously something systemic involved...something that defies explanation or any sense of consistency. It would have been useful if Eclipse would have let the community know what the problem was and how it was fixed.

我最近的另一个发现是删除任何没有文件或所有文件被排除在外的源目录。

如果您确信它曾经可以工作,而现在不再可以工作,那么 Java 索引很可能已经损坏了。在首选项中,搜索“ Java Index”; 它在“ Java”中,然后有一个按钮“ Rebuild Index”(或者使用 Ctrl + 3,“ Find Actions”,快速搜索“ Rebuild Java Index”)。选择之后,下次尝试运行 JUnit 测试时,您应该看到 Eclipse 正在重新构建 Java 索引,JUnit 测试应该现在就开始。

我遇到这个问题是因为我有一个不是静态的@Before Class。

由于某种原因,这个错误没有通过我的常规 junit 运行配置暴露出来。

我试了上面所有的答案。

在我的例子中,我的项目同时具有 junit4和 junit5依赖项。我试图使用 junit4,所以在确保我使用了正确的 junit4导入之后,它仍然无法工作。

我终于找到问题所在了。调试配置中使用的 eclipseJUnit 运行程序被设置为 JUnit5。我将其更改为 JUnit4,现在找到并执行测试。

使用 JUnit4和一个基于 Gradle 的项目,以前的建议在我的案例中都不起作用。 是的起作用的是:

  1. Right click your test source folder, and click Properties
  2. 跳到 Run/Debug Settings
  3. Select all of the run/debug configurations, and delete them.

My guess is that one of these launch configurations was messing up my JUnit4 runner. Resetting all of the run/debug configurations solved JUnit4 not finding any tests to run.

我尝试了以上所有的建议。只有删除该类的现有测试运行配置才能最终解决该问题。日食很奇怪。

在我的例子中(使用 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?

Solution: Simply removing @RunWith(MockitoJUnitRunner::class) from Top of class worked!