在使用IntelliJ IDEA运行Gradle测试时,出现"No tests found for given includes"的错误。

49

因为“找不到给定包含的测试”,我无法通过IntelliJ IDEA在Gradle中运行测试。

该怎么解决?

GradleTests

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertTrue;

public class GradleTests {
    @Test
    public void initTest() {
        assertTrue(true);
    }
}

build.gradle

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    //testCompile group: 'junit', name: 'junit', version: '4.12'

    // https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.6.0'
}

test {
    useJUnitPlatform()
}

错误:

> Task :test FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> No tests found for given includes: [GradleTests.initTest](filter.includeTestsMatching)

一些注意事项:

  • 问题在JUnit 4和5中均有复现
  • IntelliJ IDEA 2019.3.3(社区版),Build #IC-193.6494.35,构建于2020年2月11日
  • 测试位于 src/test/java
  • 更改Runner,如Intelij 2019.1更新破坏JUnit测试没有帮助
  • 没有 useJUnitPlatform() 的结果是相同的

你的Gradle版本是多少?你能从命令行运行测试吗? - Ben Watson
2
你尝试过添加 testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.6.0") 吗? - Ben Watson
1
@BenWatson 感谢您的帮助!我阅读了更多关于JUnit5最新版本的内容,并发现从5.4.0开始,它有一个聚合的构件“junit-jupiter”(对我来说更合适),其中包括了API和引擎。似乎在我的主项目中已经从其他依赖项中加载了“引擎”。 - Arrovil
它能与聚合物件一起工作吗? - johanneslink
@BenWatson 我正在使用 Junit 4.13.1,如何解决这个问题? - Girish
显示剩余2条评论
12个回答

89

6
我唯一有效的解决方案。我猜gradle插件出了问题。 - Calabacin
  1. 使用Intellij IDEA运行测试--并运行测试--你的“问题”仍然存在,测试将失败。但是Intellij会给你更多的“输出”。在我的情况下,愚蠢的测试作者(我)忘记给测试一个void返回类型。
- geneSummons
15
最新版本的Android Studio似乎不再有这个参数了,你有什么想法吗? - Anton Balashov
这对我来说很有效, 默认使用的是Gradle。然而为什么使用Gradle不起作用呢?有人知道如何使用Gradle使其正常工作吗? - Ray
要使其与Gradle配合使用,Siamak的答案对我来说很有效,只需指定useJUnitPlatform(),gradle文件中使用的是useJunit()。 - Ray

17

Gradle不知道在哪里查找测试。将以下内容添加到您的应用程序build.gradle文件的根目录(而不是android或dependencies闭包内):

tasks.withType(Test) {
    useJUnitPlatform()

    testLogging {     // This is for logging and can be removed.
        events("passed", "skipped", "failed")
    }
}

1
谢谢,我不得不在 build.gradle 中切换到使用 useTestNG. - Zach
为什么这不是标准的Gradle功能呢?! - robjwilkins

16

感谢Ben Watson,我找到了解决办法。自JUnit 5.4.0起,有一个聚合工件,包含api和engine依赖项。因此,只需向build.gradle添加一个依赖关系即可解决此问题。

testCompile ('org.junit.jupiter:junit-jupiter:5.6.0')

1
奇怪的是,你的解决方案对我没有用,而我和你的设置非常相似。作为一种解决方法,我手动创建了一个 JUnit IntelliJ 配置......但这不够好 :/ - Georgi
我不得不重新打开这个项目。Intellij有很多缓存错误,需要像这样的操作。基本上,gradle同步没有修复项目设置,直到重新打开该项目。 - Jilles van Gurp

12

/app/build.gradle

android {
  testOptions {
    unitTests.all {
      useJUnitPlatform()
    }
  }
}

9
在我的情况下,我导入了错误的文件
我需要使用import org.junit.jupiter.api.Test;而不是import org.junit.Test;

2
使用IntelliJ编辑Kotlin项目时出现此行为的另一个原因是测试所使用的文件夹,Java类需要在java的子文件夹中,而Kotlin类需要在kotlin的子文件夹中。
这是我创建的一个小型项目的示例,演示了文件夹结构:https://github.com/znsio/AutomatedTestingWithKotlin/tree/main/src/test 我找到了下面引用的解释以及源链接。
“我的问题在于单一路径到Kotlin和Java测试。因此,Kotlin测试位于root/src/test/kotlin/package中,并且可以通过gradle :cleanTest :test正常运行,而Java测试必须位于root/src/test/java/package中。否则,compileTestKotlincompileTestJava都无法找到要编译的Java测试。”https://discuss.kotlinlang.org/t/not-able-to-run-unit-tests-on-kotlin-multiplatform-project/15779/7

1

在选择其选择器时,Gradle区分大小写。 请参见此处 您可能需要将“GradleTests”更改为“gradleTests”


1

我遇到了一个错误:没有找到与给定包含项匹配的测试:...(filter.includeTestsMatching)。

在检查JUnit依赖项后,我发现了junit-4.13.1版本。

通过将此依赖项替换为org.junit.jupiter.api-5.7.0来解决问题。


0
经过查看所有配置并找不到问题后,一个简单的gradle clean解决了这个非常持久的问题,我可以继续使用“使用gradle运行测试”。
./gradlew :domain:test --tests "..."


> Task :domain:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':domain:test'.

> No tests found for given includes: ...

./gradlew clean
./gradlew :domain:test --tests "..."


BUILD SUCCESSFUL in 8s

0

请确保测试方法被授予公共访问权限。


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