没有在测试运行器“JUnit 4”中找到任何测试。

120

我在Eclipse中成功运行了我的Java测试。但现在,当我从运行菜单重新启动测试时,我收到以下信息:

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
请检查这个链接,它应该会有所帮助:https://dev59.com/ZWEh5IYBdhLWcg3wYSrt - prasad vsv
有关 junit 5 的信息,请参见此处 - Anand Rockzz
49个回答

173

我遇到了这个问题。重建或重新启动Eclipse都没有帮助。

我通过将其中一个测试方法重命名为以"test..."开头(JUnit3风格),然后所有的测试都被找到了。我将其改回先前的名称,它仍然有效。


8
我有一个名为testQuotes的方法,还有其他不以test开头的方法,但我仍然收到“找不到测试”的错误提示。 - Rachel
8
即使使用@Test对测试进行了注释,测试函数的名称仍需要以“test”作为前缀吗? - Brian Shotola
4
你可以将2015和Eclipse Luna添加到列表中。实际上,我的许多@Test方法仍然以前缀"test"开头。我从一个测试中删除了该前缀,保存后,所有测试都被发现了。然后我重新添加它,所有测试仍然被发现。看来更改方法(文件?)是为了使Eclipse重新发现所有东西。 - Brian White
1
2016年不管是使用AndroidJUnitRunner还是其他工具! - s1mm0t
2
Android Studio 2.1.1,发布于2016年5月,仍然可用。我想知道这个答案是否能一直持续到宇宙的尽头。 - Blueriver
显示剩余15条评论

46

当我们遇到这些错误时,似乎Eclipse只是混乱了。请重启Eclipse,刷新项目,清理它,让Eclipse重新构建它,然后再试一次。大多数情况下,这样做就像魔法一样奏效。


1
没错,我也试过了,同意dlamblin的看法。这是一个好的提醒,对于那些在前5分钟内找不到解决方案的奇怪问题,始终尝试重新启动一下。 - Thien
3
我曾经遇到这个问题,我关闭了定义测试类的源文件,在导航器中双击该文件,然后问题就解决了。因此,关闭并重新打开文件可以解决问题,而无需重新启动 Eclipse。 - metamatt
12
这真的让我想要寻找一个新的IDE。这对我有用。 - Seth M.
2
关闭并重新打开项目解决了我的问题! - Martin Charlesworth

37

检查一下你的测试类是否继承了"TestCase"。如果是这样,请删除该条款。你的类不需要继承自"TestCase"类。这大多数情况下都是我遇到过的。

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

以下测试用例应该没问题。

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

这确实是正确的答案。我使用IntelliJ和JUnit 4.1进行了测试,它可以正常工作! - Dio Phung
我面临的问题是,在Eclipse中我的JUnit测试运行良好,但当我将它们导出到JAR文件时,就会出现上述错误。有什么想法吗? - tryingToLearn
现在是反过来的吗?为我解决了问题的是添加“extends TestCase”。 - Heinzlmaen

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

这是对我有效的解决方案。重新启动无效。 - Andree
这就是我想要的,因为我必须将“test”文件夹放在“src”文件夹之外。我按照建议所说的做了,然后打开/关闭了项目,现在它可以编译并作为JUnit测试运行。谢谢! - quux00
我通过选择项目 -> Java构建路径 -> 源 -> 添加测试文件夹来完成了相同的操作。非常感谢! - Peter Clause
如果src/test/groovy已经作为源文件夹在您的构建路径上,请将其删除,然后再次添加。这比在每个测试文件中删除和替换@Test更容易... - geneSummons

28
我曾遇到同样的问题,经过调试发现是由于网络上的示例和junit内部错误所致。基本上不要让你的类扩展TestCase,如一些Junit 4.x示例所示。使用一些命名约定Test或者如果您想要一个注解,则可以使用@RunWith(JUnit4.class)。
如果您需要访问assert方法,请扩展Assert或使用静态导入。
如果您的类扩展了TestCase,即使您使用Junit 4 Runner进行测试,它也会被视为JUnit 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

7
尝试在方法上方添加 @Test 来进行测试,就像这样:

在测试时,可以在方法上方添加 @Test 注解。

@Test
public void testParse()
{

}

6

我再提供一个可能的解决方案:我无法从编辑器窗口或包资源管理器中运行测试类,但是在轮廓视图中右键单击类名并选择“作为JUnit测试运行”确实有效...不知道为什么!


相同的问题,在大纲视图中它可以工作,但是其他的都不行。我已经尝试了在三个 Stack Overflow 帖子中发布的每一个解决方案,但都没有用。 - MPSL
这对我也有效,但用于跨项目测试覆盖率毫无用处。 - rich

5
我已经找到了答案:
当我从eclipse中独立执行测试(右键单击方法并选择运行为junit测试)时,出现了这个错误。
当我将整个类作为junit测试执行时,测试以正确的参数执行。

4

JUnit4中不支持测试套件,建议使用注解替代或者采用旧版JUnit3命名规范。

示例:

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

4

我也遇到了这个问题。我尝试重新启动Eclipse并在测试方法前加上“tests”前缀,但都没有起作用。

以下步骤有效:

将@BeforeClass和@AfterClass中的所有测试方法更改为静态方法。

例如,如果您的测试方法格式如下:

@BeforeClass
public void testBeforeClass(){
}

然后把它改成:

@BeforeClass
public static void testBeforeClass(){
}

这对我很有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接