java.lang.Exception:没有找到匹配使用 Intellij IDEA 的方法的测试

Posted

技术标签:

【中文标题】java.lang.Exception:没有找到匹配使用 Intellij IDEA 的方法的测试【英文标题】:java.lang.Exception: No tests found matching Method using Intellij IDEA 【发布时间】:2017-04-13 07:32:12 【问题描述】:

我遇到了 Intellij IDEA 2016.3 的奇怪行为。当我在运行测试时得到java.lang.Exception: No tests found matching Method foo 时,拥有一个带有方法foo 的类和一个针对该方法的JUnit 测试。在我执行mvn test 之后,它成功,然后在执行 mvn 命令后立即运行单元测试,它突然运行绿色。似乎IDEA不会自动编译。我该如何解决这个问题?

附:升级到 v. 2016.3 后未更改任何设置

【问题讨论】:

查看测试的运行配置。如果您看到 Make,那么 IntelliJ 将在您更改测试时再次编译。由于这是一个 Maven 项目,我假设您的测试类位于 src/test/java 中。 @duffymo 你是对的,我有一个损坏的测试运行配置。删除损坏的并重新运行测试后,它工作正常。您可以将您的评论作为答案,以便我接受。 阿瑟不用担心,很高兴为您提供帮助。 @duffymo 今天问题又出现了,即使没有测试类的运行配置,只是运行测试导致了问题 @duffymo 我尝试将Before launch 选项更改为Build project 而不是Build,突然一切都开始正常工作了。 【参考方案1】:

好吧,在对每个单元测试的运行配置“玩”了一下之后,我注意到每个运行配置在Before Launch 选项中预设了一个Build 目标(见下图):

Build 更改为Build Project 后,测试运行良好。

【讨论】:

我也错过了所有测试都在运行的旧 IDEA 版本中的 Make 选项。这是一种错误还是我应该改变smth。让测试运行。我不想更改每个测试的每个运行配置的预设。【参考方案2】:

如果您最初运行名为“foo”的测试,然后将其重命名为“fooBar”,您必须随后使用新的运行配置运行“fooBar”

如果您为“foo”使用相同的原始运行配置来运行“fooBar”,它仍然会查找名为“foo”的测试,但它没有找到(因此出现异常),因为它已重命名为“fooBar”。新的运行配置将正确查找“fooBar”测试。

我在不知不觉中犯了这个错误,因为我重命名了一个测试,然后只是单击了 IntelliJ 中的绿色运行按钮:这样做会运行最后一个运行配置,在这种情况下它具有旧的“foo”名称。

【讨论】:

这种情况尤其发生在您第一次运行测试时,您选择了测试方法,而不是整个班级。【参考方案3】:

如果您使用的是 Junit's 或 Robolectric's 等理论测试框架,请确保运行包含所需测试的类,而不是测试本身。由于这些框架将测试方法用作实例方法而不是静态方法,因此任何寻找正常public static 测试的测试框架都找不到任何东西。

【讨论】:

我习惯于只运行测试方法,而不是整个班级。但是尝试您的解决方案导致我遇到实际错误 - 我尝试运行的方法不是公开的(我在 Eclipse 上遇到了这个问题)。【参考方案4】:

确保你的班级上面提到的跑步者是正确的。

当我使用跑步者CucumberWithSerenity.class 时,我收到了这个奇怪的消息。当我更改为SerenityRunner.class 时,它得到了修复。

@RunWith(SerenityRunner.class)
//@RunWith(CucumberWithSerenity.class)
public class WordPressAppTest 

我正在使用 Serenity 框架进行 Web 自动化并在下面的运行器类中使用

import net.serenitybdd.cucumber.CucumberWithSerenity;
import net.serenitybdd.junit.runners.SerenityRunner;
import org.junit.runner.RunWith;

我觉得 IDEA (2017.2.6) 可以显示比这更好的错误信息

【讨论】:

【参考方案5】:

我在使用 Gradle (4.5+) + 新的 Build Cache 功能时遇到了同样的问题

有时它无法找到新的测试方法并抛出异常(就像你在主题中提到的那样)

解决方案:清理.gradlebuildout 目录,然后重试;)

【讨论】:

这是我的正确答案,我一直在使用 IntelliJ,所以它与 eclipse 无关。删除所有内容并重建工作!解决了我的 1 小时浪费问题...谢谢!【参考方案6】:

删除 Intellij 的 out 目录为我解决了这个问题。

【讨论】:

固定一分钟。它仍然不知道何时重新编译我的项目。 我刚刚删除了我的整个项目,然后再次克隆它。它现在正在工作......不知道为什么:/ 或者删除buildtarget等目录,然后重新构建。【参考方案7】:

除了这里的其他答案:当您在测试方法声明之前忘记@Test 时,也会发生错误。 IntelliJ (2018.1) 仍会为您显示绿色的“播放按钮”以执行测试,但您的测试类中的公共方法将不是实际测试。

【讨论】:

【参考方案8】:

也许你只是给测试方法一个错误的名字。

我遇到了这个问题,因为我使用了“-”而不是 intelliJ 无法表示的“_”。

【讨论】:

STS 是 Spring 开发的最佳工具【参考方案9】:

确保您的@test 方法以及测试类是public

【讨论】:

【参考方案10】:

如果没有在测试方法上方放置@Test注解,也会出现这种情况。

【讨论】:

【参考方案11】:

既然你得到了你的答案并且其他人正在寻找解决方案,

查看您的测试类是否扩展了与 JUnit 3 相关的 TestCase 抽象类。为了解决这个问题,您必须以“test”开头您的方法名称。 例如public void testFoo()

如果 JUnit 3 不是这种情况,则您的 JUnit 4 测试方法中缺少 @Test 注释。

注意:如果您是从 TestCase 扩展而来,并且测试方法使用 @Test 进行注释,并且您的方法名称以“test”开头,那么您可能正在将 JUnit 3 与 JUnit 混合使用4. 不要那样做。如果这些方法的名称以“test”开头,则会导致其他错误,例如带有@Ignore注释的方法将不会被忽略。

【讨论】:

【参考方案12】:

在我的例子中,我从另一个类复制了一个测试并对其进行了修改,但在运行测试时它仍然指向前一个。

Build > Clean Project 解决了问题

【讨论】:

【参考方案13】:

我必须在测试方法名称之前添加测试。

methodtest() 不起作用,但 testMethod() 起作用

【讨论】:

为我工作!谢谢~【参考方案14】:

确保将@org.junit.Test 添加到您的方法之上。我忘记了它们,这为我解决了问题!

【讨论】:

【参考方案15】:

您可以检查 IntelliJ 屏幕顶部的运行/调试配置。 使用“减号按钮”删除所有内容,然后再次点击“运行”绿色按钮以运行测试。

您也可以在右侧的 maven 选项卡上重新加载项目。

【讨论】:

【参考方案16】:

在我的 spring mvc 项目中。我通过添加解决了这个问题

@RunWith(SpringJUnit4ClassRunner.class)

到我的测试班。

【讨论】:

以上是关于java.lang.Exception:没有找到匹配使用 Intellij IDEA 的方法的测试的主要内容,如果未能解决你的问题,请参考以下文章

JUnit测试提示Java.lang.Exception: No runnable methods

android 应用程序中的 Geckoview 因错误“java.lang.Exception:加载 sqlite 库时出错”而崩溃

java.lang.Exception: Exception in sending Request :: null

出现java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: com.web.visit.ma

java中的异常类型以及区别????

keytool 错误: java.lang.Exception: 密钥库文件存在, 但为空: E:xxxxxx.jks