115

我的 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>

如何解决此错误并再次运行测试?

4

44 回答 44

167

这只是发生在我身上。重建或重新启动 Eclipse 没有帮助。

我通过将其中一种测试方法重命名为以“test...”(JUnit3 样式)开头来解决它,然后找到所有测试。我将它重命名回原来的样子,它仍然有效。

于 2010-06-06T04:24:52.677 回答
45

当我们得到这些错误时,Eclipse 似乎只是感到困惑。重新启动 Eclipse,刷新项目,清理它,让 Eclipse 重建它,然后重试。大多数时候,这就像一个魅力。

于 2010-02-27T05:11:03.190 回答
35

在“测试”目录的上下文菜单中选择“构建路径”->“用作源文件夹”。Eclipse 应该将您的 unitTests.java 文件视为源文件。出现警告“未找到 JUnit 测试”,因为您的“构建”目录中没有 unitTests.class 文件

于 2011-04-11T09:47:36.373 回答
34

检查您的测试类是否扩展了“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
于 2011-02-11T01:29:09.030 回答
28

我遇到了同样的问题,我将它调试为网络上的坏例子和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 兼容性测试。

于 2011-01-20T14:03:21.020 回答
6

尝试添加

@Test 上面的测试方法是这样的

@Test
public void testParse()
{

}
于 2012-11-15T03:34:14.990 回答
5

我将提出另一种可能的解决方案:我无法从编辑器窗口或包资源管理器运行测试类,但右键单击大纲视图中的类名并选择 Run As JUnit测试确实有效......去图!

于 2015-02-04T15:03:49.880 回答
4

我找到了答案:

当我从 Eclipse 独立执行测试时出现此错误(右键单击该方法并选择作为 junit 测试运行),

当我作为 junit 测试执行完整的类时,测试使用参数正确执行。

于 2013-12-08T13:27:43.600 回答
4

这也发生在我身上。我尝试重新启动 Eclipse,并在我的测试方法前面加上了测试。都没有奏效。

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

即,如果您有以下格式的测试方法:

@BeforeClass
public void testBeforeClass(){
}

然后将其更改为:

@BeforeClass
public static void testBeforeClass(){
}

这对我有用。

于 2012-07-31T23:09:50.787 回答
4

JUnit4 中没有测试套件。请改用注释或使用旧的 JUnit3 名称约定。

例子:

@RunWith(Suite.class)
@SuiteClasses({YourClassWithTests.class})
于 2012-03-21T21:24:29.917 回答
3

我的问题是声明import org.junit.Test;已经消失(或者没有添加?)。添加它之后,我不得不删除另一个import声明(Eclipse 会提示你是哪一个),然后一切又开始工作了。

于 2012-12-14T16:38:02.707 回答
3

很晚了,但为我解决问题的是我的测试方法名称都以大写字母开头:“public void Test”。使 t 小写起作用。

于 2013-04-07T18:39:26.573 回答
3

当我遇到这个问题时,我只是编辑文件并保存它......就像魅​​力一样

于 2012-07-31T06:06:21.810 回答
2

我尝试了德语的解决方案。它适用于我班上的所有方法,但我的项目中有很多班。

所以我尝试从构建路径中删除然后重新添加它。它工作得很好。

希望能帮助到你。

于 2010-06-20T09:39:52.503 回答
2

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

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

于 2016-05-24T15:13:54.327 回答
1

解决我的问题的方法类似于@JamesG 的回答:我重新启动了 Eclipse,重建了项目,然后刷新了它;但在我这样做之前,我首先关闭了项目(右键单击包资源管理器中的项目->关闭项目),然后重新打开它。然后它起作用了。

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

于 2012-07-31T00:47:33.053 回答
1

Close and open the project worked for me.

于 2014-01-06T03:53:50.120 回答
1

检查您的测试所在的文件夹是否是源文件夹。如果没有 - 右键单击​​并用作源文件夹。

于 2013-07-26T14:24:21.143 回答
1

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

但这可能会触发“没有使用测试运行器'JUnit 4'找到测试”错误消息。

或者您在测试类中进行了修改,删除了@Test注释。
请参阅此wiki 页面

于 2010-02-25T09:46:11.173 回答
1

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

于 2011-07-14T07:32:34.443 回答
1

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

右键单击项目 -> Maven -> 更新项目。

你应该很高兴去..

于 2016-02-09T22:12:52.320 回答
1

添加@Test在您的测试之上。
鼠标悬停在注释上。
选择“将 junit 4 库添加到类路径”

于 2019-09-13T21:31:58.993 回答
1

您可以通过执行以下操作来解决此问题:

  • 右键单击名为“测试”的文件夹>构建路径>用作源文件夹
  • 或者您可以将类路径设置为:<classpathentry kind="src" path="src/test/java"/>. 你用你的测试包替换“src/test/java”

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

于 2016-04-28T03:54:09.323 回答
1

还有一次机会,您可能已将 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.
于 2015-08-11T06:40:57.007 回答
1

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

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

于 2019-06-25T09:38:58.343 回答
0

我必须在命令行上执行 mvn clean,然后在 Eclipse 中执行 project->clean。我事先重命名了该课程,然后将其重命名,但我怀疑这是否有帮助。

于 2012-05-27T01:36:05.657 回答
0

我也在用 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>
于 2013-10-22T15:18:30.440 回答
0

我发现如果您的测试类从TestCase. 如果您删除继承,注释对我有用。

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

于 2011-04-25T14:01:31.230 回答
0

我开始在工作中使用 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();
    }

}
于 2015-03-12T16:12:48.110 回答
0

这也发生在我身上。我发现在 Eclipse 中我没有创建一个新的 Java 类文件,所以这就是它没有编译的原因。尝试将您的代码复制到 java 类文件中,如果它还没有,然后编译。

于 2010-07-26T17:58:13.213 回答
0

你的 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

于 2010-02-25T09:22:04.087 回答
0

我不时有这个问题。对我来说最能解决问题的是从运行配置运行 JUnit 测试......确保将 JUnit 4 设置为测试运行器。

通常,我在尝试从包资源管理器的上下文菜单中运行时看到此问题... Junit 测试。如果您右键单击您尝试运行的测试的代码,而不是选择 Run As... Junit Test 您选择运行配置...确保正确设置项目、测试类和测试运行器,单击应用,然后运行一直为我工作。

于 2014-09-22T14:49:16.793 回答
0

就我而言,问题是泛型参数:

public class TestClass<T extends Serializable> {

删除

<T 扩展可序列化>

并且该选项再次可用。

我正在使用 Junit4

于 2019-11-07T08:52:13.617 回答
0

我的问题是使用**

测试

** 包 org.testng.Assert;

您可以用 JUnit 在项目( Maven )的库中替换它,然后需要重构项目。
或者添加 TestNG Eclipse 插件

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

于 2019-01-19T06:53:25.020 回答
0

Right Click Scala Test Class-> Run As -> Scala Junit Test使用 ScalaIDE (3.0.4-2.11-20140723-2253-Typesafe) 我在上下文菜单中遇到了类似的问题。

我尝试编辑类(但不是因为编译失败)、清理、关闭项目、关闭 Eclipse。这些都无法恢复以前运行良好的类的上下文菜单。测试类不使用@Test注释,而是使用@RunWith(classOf[JUnitRunner])ScalaTest 代码在类的顶部使用注释。

当我尝试Scala Junit Test直接从运行配置启动编辑器中进行选择时,我收到了来自问题的对话框。Footix29 的回答对我来说是关键。

我注意到,即使我已经清理了几次我的项目,我在 /bin 目录中的类实际上并没有在一段时间内重新构建。

以下是我返回上下文菜单并再次运行Scala Junit Tests 的方法:

  • manually/bin/<package dir>*通过删除通过资源管理器清理类
  • Project -> Clean编辑项目以及完整的重建

我怀疑一般的类编辑能够清除一些已保存的 Eclipse 状态并让它再次运行。就我而言,我尝试过的所有以前的工作课程都失败了,所以manual干净的步骤就是我需要的锤子。但是,影响 Eclipse 的类路径/构建状态概念的其他技巧也应该起作用。

此外,我认为这种行为的部分原因是尝试通过重命名来重构 Scala 类(Scala Eclipse IDE 很糟糕),其中初始文件更改后的所有清理都是手动的。没有构建错误,但也没有我期望的警告,这意味着某些东西肯定卡在了 Eclipse 的构建状态信息中。

于 2015-07-15T15:28:50.187 回答
0

我尝试了上面的所有答案。

就我而言,我的项目同时具有 junit4 和 junit5 依赖项。我试图使用junit4,所以在确保我使用了正确的junit4导入之后它仍然不起作用。

我终于找到了问题所在。调试配置中使用的 eclipse JUnit 运行器设置为 JUnit5。我将其更改为 JUnit4,现在可以找到并执行测试。

于 2021-10-11T09:48:14.487 回答
0

当我的 Java 类名与 Test 类名相似时,我遇到了这个问题。刚刚更新了测试类的名称,通过使用密钥“测试”对其进行后期修复,它开始工作

之前: Java 类:ACMEController 测试类:ACMEController

之后: Java 类:ACMEController 测试类:ACMEControllerTest

于 2019-07-25T11:02:34.957 回答
0

我遇到了这个问题,因为我有一个不是静态的 @BeforeClass。

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

于 2021-05-21T05:50:39.637 回答
0

检查更新!考虑到已经提出了多少变通方法,Eclipse 无疑完全意识到了这个问题。显然有一些系统性的东西……一些无法解释或任何一致性的东西。如果 Eclipse 能让社区知道问题是什么以及如何解决它,那将会很有用。

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

于 2020-09-04T20:14:28.443 回答
0

您可以简单地通过重命名您的测试类以具有以 Test 结尾的名称来解决这个问题,例如 ThisAndThatTest

于 2020-06-15T01:54:30.100 回答
0

如果您确定它曾经可以工作,但现在不再工作,那么 Java 索引很可能已损坏。在首选项中,搜索“java index”;它在“Java”中,然后有一个“重建索引”按钮(或使用 Ctrl+3,“查找操作”,快速搜索“重建 Java 索引”)。选择后,下次尝试运行 JUnit 测试时,您应该会看到 Eclipse 正在重建 Java 索引,并且 JUnit 测试现在应该开始。

于 2021-04-30T09:54:22.007 回答
-1

如果您尝试设置junit 5 添加@RunWith(JUnitPlatform.class)

import org.junit.platform.runner.JUnitPlatform;以便eclipse可以将测试类识别为junit 5测试类

于 2018-04-14T17:41:06.177 回答
-1

我在实现@RunWith(Cucumber.class) 时也遇到了这个问题。由于此注释位于公共类中,因此 Eclipse 显示此“未找到测试运行程序的测试”错误。

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

读者必须确定他们正在使用哪个 Junit Test Runner。可以使用@RunWith(JUnit4.class) 检查是在 runner.class 括号 {} 的外部还是内部。如果在里面,请放在外面。

于 2016-12-11T10:53:29.283 回答
-1

这个异常有两个原因:

  1. 源代码尚未编译。
  2. 或者相反,源代码已经编译,但 JUnit 找不到。

原因一,它没有腿可以站立。因为就像许多人所说的那样:“旧”方法非常有效。只有新增的方法无法识别。然后第二个原因变成了唯一的解释:JUnit 找不到新编译的类。考虑到这一点,我这样做了:右键单击项目-> Java 构建路径-> 编辑源项:project_name/src/test/java 的输出文件夹,将输出文件夹更改为“特定输出文件夹(相对于项目名称的路径) . 提供此值:目标/测试类。请注意:这是 Maven 定义的默认测试源代码的输出文件夹。它已被 M2E(或我)覆盖。这就是 JUnit 找不到它的原因。所以我的猜测是许多遇到这个可爱异常的人很可能正在处理一个由 Maven 管理的 Web 项目。我对吗?!这也促成了我的结论,即应该排除一个原因 - 可以找到“旧”方法是因为它们在 Tomcat (重新)启动时已自动编译。也许进入了“错误”的路径,但 JUnit 还是找到了它。

在我弄清楚这一点之前。我按照建议尝试了很多事情:更新到最新的 JUnit4,在构建路径和用作源文件夹之间来回切换,大写测试与测试等。在我明确确定测试源的输出位置之前,什么都没有发生。有了这些解释,我的第二个原因应该重新表述为:新代码没有及时编译到正确的路径!祝你好运。

于 2016-08-19T07:04:19.923 回答