未找到测试运行程序“ JUnit 4”的测试


105

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

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


1
您可以发布测试的内容(或至少发布类声明)吗?您还写下了“最后有:”。
phtrivier


对于junit 5,请参见此处
Anand Rockzz

Answers:


155

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

我通过重命名一种测试方法以“ test ...”(JUnit3样式)开始解决了该问题,然后找到了所有测试。我将其重命名为以前的名称,并且仍然有效。


7
我有像testQuotes其他方法一样不以测试开头的方法,但仍然得到未找到测试错误
Rachel

1
我对extends类存在相同的问题junit.framework.TestCase,而我的方法必须以“ test”开头。而不是扩展TestCase,而是添加了import:,import static org.junit.Assert.*;并且可以根据需要命名方法。奇怪...
MrDrews

6
严重的是,即使用@Test注释了测试,测试函数名称仍需要加上“ test”前缀吗?
Brian Shotola

4
您也可以将2015和Eclipse Luna添加到该列表中。实际上,我的许多@Test方法仍然以前缀“ test”开头。我在一个测试中删除了该前缀,进行了保存,然后找到了所有测试。之后,我将其添加回去,并继续找到所有测试。似乎更多的是更改方法(文件?),以便Eclipse重新发现所有内容。
布赖恩·怀特

2
2016年5月的Android Studio 2.1.1仍然可以使用。我想知道这个答案是否会一直持续到宇宙的尽头。
Blueriver

42

当我们收到这些错误时,Eclipse似乎感到困惑。重新启动Eclipse,刷新项目,清理它,让Eclipse重建它,然后再试一次。在大多数情况下,它就像一种魅力。


1
是的,我也为我工作,并同意dlamblin。提醒您,在出现问题的前5分钟内,如果遇到任何奇怪的问题,请务必尝试重新启动。

3
我遇到了这个问题,我关闭了定义测试类的源文件,在导航器中双击该文件,它开始工作。因此,关闭并重新打开文件的工作是有效的,而无需重新启动Eclipse。
metamatt'3

11
这确实让我想寻找一个新的IDE。这对我有用。
赛斯·M。

1
关闭并重新打开该项目对我来说很固定!
马丁·查尔斯沃斯

34

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


这是对我有效的解决方案。重新启动无效。
Andree 2012年

这就是我要的,因为我必须在“ src”文件夹中没有“ test”文件夹。我这样做了,然后按照其他答案的建议打开/关闭了项目,现在它可以编译并作为JUnit测试运行。谢谢!
quux00 2012年

我通过选择项目-> Java构建路径->源->添加测试文件夹来完成相同的操作。非常感谢!
彼得·

如果src / test / groovy已经在您的构建路径中作为源文件夹,请将其删除,然后再次添加。不是删除,并在每个测试文件替换@Test容易...
geneSummons

32

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

确实是正确的答案。我用IntelliJ和JUnit 4.1对其进行了测试,并且可以正常工作!
Dio Phung 2014年

我面临的问题是,在Eclipse中,我的JUnit测试可以正常运行,但是当我将它们导出到JAR时,出现了以上错误。有任何想法吗?
tryToLearn

这几天是另一回事吗?添加“扩展TestCase”可以为我解决问题。
Heinzlmaen

为我工作!!!谢谢
JRichardsz

27

我遇到了同样的问题,并将其调试为Web和junit内部的不良示例。基本上,不要让类扩展TestCase,如Junit 4.x的一些示例所示。使用一些命名约定Test,或者如果您要具有注释,则可以使用@RunWith(JUnit4.class)。

如果需要访问断言方法,则可以扩展声明或使用静态导入。

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

请参见JUnit3Builder和以下行:

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

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


2
这为我解决了问题。如果您首先查看有关如何使用Junit的较旧的示例,它们将使您误入歧途。
Alex Kilpatrick

“如果您的类扩展了TestCase,那么即使您使用Junit 4 Runner,它也将以3运行”-这是不正确的(至少对于Groovy和Intellij IDEA而言)。我正在使用JUnit 4.12,并使用@RunWith(JUnit4)“ GroovyTestCase”对其进行了注释,并扩展了该类。没有@RunWith(JUnit4)我,我会面临同样的问题。
Veaceslav Gaidarji

该行为与2017年(JUnit 4.12)相同。
sharmaap

5

尝试添加

@Test这样的测试方法之上

@Test
public void testParse()
{

}

5

我会提出另一个可能的解决方案:我既不能从编辑器窗口也不能从Package Explorer运行测试类,但是右键单击Outline视图中的类名称并选择Run As JUnit测试成功了...去吧!


同样,从轮廓图来看,它起作用了,其他所有都不起作用-我已经尝试了将每个解决方案发布在3个堆栈溢出线程中,但是没有任何效果
MPSL,

这对我也适用,但是对于测试整个项目的覆盖范围没有用。
丰富的

4

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

例:

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

4

这也发生在我身上。我尝试重新启动Eclipse,并在测试方法前加上了测试。两者都不起作用。

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

也就是说,如果您的测试方法采用以下格式:

@BeforeClass
public void testBeforeClass(){
}

然后将其更改为:

@BeforeClass
public static void testBeforeClass(){
}

这对我有用。


4

我找到了答案:

当我从eclipse中独立执行测试时出现此错误(右键单击该方法,然后选择以junit测试身份运行),

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


3

遇到此问题时,我只需要编辑文件并保存即可...就像魅​​力一样


1
大家好,欢迎来到Stackoverflow!:)您能否详细说明您的答案?
利特姆,2012年

@Mahesh您的意思是刷新文件(选择它并按F5键)
Cassian

我在scala中遇到了同样的问题,即我的测试是为JUnit4编写的,但它们在scala中。正如@Mahesh所建议的,解决方案是给编译器一个踢腿。编辑文件并不重要,只需编辑即可。我输入会导致语法错误的内容,然后保存文件,然后撤消并再次保存。突然我的测试开始了。这在我身上经常发生,即至少每天,通常每天多次。
Erick G. Hagstrom 2015年

3

我的问题是声明import org.junit.Test;已消失(或未添加?)。添加import完之后,我必须删除另一个声明(Eclipse会提示您哪个声明),然后一切再次开始工作。


3

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


这对我
有用

2

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

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

希望能帮助到你。


2

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

在我的Eclipse Mars 2中,我发现如果@Test文件中包含9个或10个以上的批注,它将无法识别从git引入的测试类。我需要注释掉所有额外的测试,运行测试类,然后取消注释并重新运行该类。去搞清楚...


这里的答案很有帮助,我的情况并不完全相同,但是测试方法的名称非常相似,eclipse在查找它们时遇到了问题。像testCase01,testCare02一样...为了运行testCase01,我必须注释其他“ testCasexx”方法,否则它将引发异常。使所有测试方法PUBLIC似乎已经解决了这个问题!
01000001

1

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

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

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


@Test在这里,消息是:无法找到主类toto.lolo.testrunner(在运行配置中指定)
user281070 2010年

@lamisse:那么,某种类路径问题?还是syntex问题:应该(toto.lolo.Testrunner而不是toto.lolo.testrunner('T'))
VonC

@lamisse:“ toto.lolo.Testrunner”是您的TestRunner类的实际名称吗?是你写的东西吗?项目/ jar是否在启动配置的类路径中包含它?
phtrivier

1

在运行JUnit测试时,我也面临相同的问题。我通过将注解@Test放在主要测试函数上方来解决此问题。


1

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

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


1

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



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.

1

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


0

您的Eclipse项目基于Maven吗?如果是这样,您可能需要更新m2eclipse版本。

简要说明一下:我在Eclipse中有一个基于Maven的项目,最初是使用Eclipse中的“新Maven项目”向导生成的。我正在使用JUnit 4.5进行单元测试,并且可以很高兴地使用maven从命令行运行测试,而使用Eclipse作为JUnit测试运行来自Eclipse的单个测试...。但是,当我尝试运行所有测试时在项目中,通过在项目根节点上调用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


我不明白,我不认为这与eclispe版本有关,我的测试昨天成功了,现在不是这样,因为Junit启动弹出窗口是否有办法简化我的第一个配置?
user281070 2010年

拉米兹,我也很困惑。我建议您更新问题以解释何时运行单元测试以及何时不运行单元测试。
b.roth

0

这也发生在我身上。我发现在Eclipse中,我没有创建新的Java类文件,所以这就是为什么不进行编译的原因。如果尚不存在,请尝试将代码复制到Java类文件中,然后进行编译。


0

我发现,如果您的测试类从扩展,Eclipse似乎只会执行JUnit 3样式测试TestCase。如果删除继承,则注释对我有用。

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


0

我必须在命令行上执行mvn clean,然后在Eclipse中进行project-> clean。我事先给班级改名,然后又改回了班级,但我怀疑这样做有帮助。


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>

0

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

通常,在尝试从Package Explorer的上下文菜单中运行为... Junit测试时,会看到此问题。如果右键单击要尝试运行的测试的代码,而不是选择“运行方式...” Junit Test,则选择“运行配置” ...确保正确设置项目,测试类和测试运行器,单击“应用”,然后运行一直在为我工作。


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();
    }

}

0

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

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

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

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

这是我返回上下文菜单并能够再次运行的方式 Scala Junit Test s的方式:

  • manually通过删除/bin/<package dir>*via Explorer 清理类
  • Project -> Clean编辑了该项目并进行了全面重建

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

此外,我认为,此行为部分是由于尝试通过重命名Scala类(Scala Eclipse IDE吸吮了该类)而重构了Scala类,其中,初始文件更改后的所有清除操作都是手动的。没有构建错误,但是也没有警告,我期望这意味着Eclipse的构建状态信息中肯定存在某些错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.