测试运行'JUnit 4'没有测试结果

时间:2010-02-25 09:15:58

标签: java eclipse junit junit4

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

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

42 个答案:

答案 0 :(得分:146)

这恰好发生在我身上。重建或重启Eclipse没有帮助。

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

答案 1 :(得分:41)

当我们得到这些错误时,似乎Eclipse只是混淆了。重启Eclipse,刷新项目,清理它,让Eclipse重建它,然后再试一次。大部分时间都像魅力一样。

答案 2 :(得分:34)

在'test'目录的上下文菜单中选择'Build path' - &gt; '用作源文件夹'。 Eclipse应该将您的unitTests.java文件视为源文件。 警告'未找到JUnit测试',因为'build'目录中没有unitTests.class文件

答案 3 :(得分:28)

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

答案 4 :(得分:27)

我遇到了同样的问题,我把它调试到了网络和junit内部的坏例子。基本上不要让你的类扩展TestCase,如Junit 4.x中的一些示例所示。使用一些命名约定 Test ,或者如果你想要一个注释,你可以使用@RunWith(JUnit4.class)。

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

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

请参阅JUnit3Builder和行:

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

返回true,不会尝试测试junit4兼容性。

答案 5 :(得分:5)

尝试添加

@Test上面的测试方法就像这样

@Test
public void testParse()
{

}

答案 6 :(得分:4)

另一种可能的解决方案我将投入到响铃中:我无法从编辑器窗口运行测试类,也无法在Package Explorer中运行测试类,而是右键单击类中的类名。大纲视图并选择Run As JUnit Test确实有效......去图!

答案 7 :(得分:4)

我找到了答案:

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

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

答案 8 :(得分:4)

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

示例:

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

答案 9 :(得分:4)

这也发生在我身上。我尝试重新启动Eclipse并使用测试为我的测试方法添加前缀。两者都没有。

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

即。如果你有以下格式的测试方法:

@BeforeClass
public void testBeforeClass(){
}

然后将其更改为:

@BeforeClass
public static void testBeforeClass(){
}

这对我有用。

答案 10 :(得分:3)

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

答案 11 :(得分:3)

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

答案 12 :(得分:3)

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

答案 13 :(得分:2)

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

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

希望它有所帮助。

答案 14 :(得分:1)

关闭并打开为我工作的项目。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

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

但是这可能会触发“没有测试运行'JUnit 4'的测试错误信息。”

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

答案 17 :(得分:1)

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

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

答案 18 :(得分:1)

我的案例与@ JamesG的答案相似:我重新启动了Eclipse,重建了项目并刷新了它;但在我做了之前,我首先关闭了项目(右键单击包浏览器中的项目 - &gt;关闭项目),然后重新打开它。然后它奏效了。

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

答案 19 :(得分:1)

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

答案 20 :(得分:0)

我必须在命令行上执行mvn clean然后在eclipse中执行project-&gt; clean。我事先将这个课程重新命名,然后重新命名,但我怀疑是否有帮助。

答案 21 :(得分:0)

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

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

检查更新!考虑到已经提出了许多解决方法,Eclipse无疑完全意识到了这个问题。显然有一些系统性的东西……有些东西不符合解释或任何一致性的感觉。如果Eclipse让社区知道问题所在和解决方法,那将很有用。

对我来说,最近的另一个发现是删除没有文件或排除所有文件的任何源目录。

答案 24 :(得分:0)

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

答案 25 :(得分:0)

在我的情况下,问题是泛型参数:

public class TestClass<T extends Serializable> {

正在移除

  

并且该选项再次可用。

我正在使用Junit4

答案 26 :(得分:0)

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

答案 27 :(得分:0)

当我的Java类名与Test类名相似时,我遇到了这个问题。刚刚通过用“ Test”关键字进行修正来更新Test类的名称,然后它开始工作

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

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

答案 28 :(得分:0)

我最近遇到了这个问题,在最新的Eclipse中似乎已解决。

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

答案 29 :(得分:0)

我的问题是使用**

  

testng

**包  org.testng.Assert;

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

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

答案 30 :(得分:0)

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

  

快速说明:我有一个项目   Eclipse是基​​于maven的,和   最初使用“new。”生成   maven项目“Eclipse中的向导。我是   使用JUnit 4.5进行单元测试,   并且可以很愉快地进行测试   从命令行使用maven,和   Eclipse使用的单独测试   作为JUnit测试运行....但是,当我   试图运行所有的测试   通过调用run作为JUnit进行项目   test ...在项目根节点上,   Eclipse抱怨说“没有发现任何测试   与测试跑步者junit 4 “。解决了   将m2eclipse升级到最新版本   稳定的发展建设   m2eclipse更新站点(具体来说,我   从版本升级   0.9.8.200905041414到Eclipse Galileo中的0.9.9.200907201116版本。

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

答案 31 :(得分:0)

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

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

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

答案 32 :(得分:0)

右键单击项目 - &gt;构建依赖关系 - &gt;删除已从构建路径中排除的那些 - &gt;单击“确定”

右键单击项目 - &gt; Maven - &gt;更新项目。

你应该好好去......

答案 33 :(得分:0)

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

答案 34 :(得分:0)

我开始在我的工作中使用Selenium和Eclipse,我正在进行第一次自动化测试,并从代码@Before,@ Test和@After注释中删除,我遇到了这个问题&#34;没有测试找到了测试运行者junit4&#34;。

我的解决方案只是再次添加@ 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();
    }

}

答案 35 :(得分:0)

答案 36 :(得分:0)

我经常遇到这个问题。解决这个问题的最重要的事情是从运行配置中运行JUnit测试...确保将JUnit 4设置为测试运行器。

通常,我在Package Explorer的上下文菜单中尝试Run As ... Junit测试时会看到此问题。如果右键单击要运行的测试代码,而不是选择Run As ... Junit Test,则选择Run configurations ...确保Project,Test Class和test runner设置正确,单击apply,然后运行我一直都在工作。

答案 37 :(得分:0)

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

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

答案 38 :(得分:0)

我也在使用Maven运行Eclipse(m2e 1.4)。测试是使用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>

答案 39 :(得分:-1)

这种例外有两个原因:

  1. 源代码尚未编译YET。
  2. 或者相反,源代码已经编译但是JUnit找不到它。
  3. 由于理由一,它没有站立的腿。因为很多人都说:“老”的方法很完美。只有新添加的方法无法识别。 然后第二个原因成为唯一的解释:JUnit找不到新编译的类。 考虑到这一点,我做到了这一点:右键单击项目 - &gt; Java Build Path - &gt;编辑源项目: project_name / src / test / java的Output文件夹,将Output文件夹更改为'特定输出文件夹(相对于project_name的路径)。提供此值:target / test-class。 保持:这是Maven定义的默认测试源代码输出文件夹。它已被M2E(或我)覆盖。这就是为什么JUnit找不到它。 所以我的猜测是,许多遇到这个可爱异常的人最有可能处理由Maven管理的Web项目。我对吗?!这也促成了我的结论,即应该排除一个原因 - 可以找到“旧”方法是因为它们是在(重新)启动时自动编译的。也许进入“错误”的道路,但无论如何JUnit都找到了它。

    在我弄明白之前。我按照建议尝试了很多东西:更新到最新的JUnit4,在构建路径之间来回和用作源文件夹,资本测试与测试等。在我专门确定测试源的输出位置之前没有发生任何事情。 有了所有这些解释,我的第二个理由应该重新措辞如下:新的代码没有及时汇编到正确的道路上! 祝你好运。

答案 40 :(得分:-1)

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

一旦我在跑步者课程之前调用/放置了测试跑步者注释,测试就很好了。

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

答案 41 :(得分:-1)

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

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