为什么@DisplayName在JUnit 5中对我不起作用?

时间:2019-11-23 20:48:21

标签: gradle kotlin junit junit5

由于某种原因,我真的很难让显示名称真正在Kotlin的JUnit 5中得到尊重。 这是我出于示例目的创建的测试文件:

import org.assertj.core.api.Assertions
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test

@DisplayName("Example Test")
class ExampleTest {
    @Test
    @DisplayName("test name")
    fun myTest() {
        Assertions.assertThat(false).isTrue()
    }
}

但是没有使用这些名称,而是显示了实际的类/方法名称,就好像它们根本没有用@DisplayName进行注释一样。这是./gradlew test的输出:

project.path.ExampleTest > myTest() FAILED
    org.opentest4j.AssertionFailedError at ExampleTest.kt:12

25 tests completed, 1 failed

> Task :test FAILED

我一直认为我的Gradle配置肯定有问题,但是设置非常简单,所以我不知道自己可能做错了什么。 这是我的build.gradle.kts:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm") version "1.3.60"
    id("org.jmailen.kotlinter") version "2.1.2"
    id("org.jetbrains.kotlin.plugin.serialization") version "1.3.60"
}

version = "0.1"

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.14.0")
    testImplementation("org.junit.jupiter:junit-jupiter:5.5.2")
    testImplementation("org.assertj:assertj-core:3.14.0")
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.test {
    useJUnitPlatform()
}

在这一点上,我真的挠头了,所以任何想法都将不胜感激。它也不使用我为动态测试提供的名称(与@TestFactory结合使用),这特别令人讨厌。

3 个答案:

答案 0 :(得分:3)

最后弄清楚了。这是一个IntelliJ配置问题。 (显示名称显然永远不会在命令行中显示。)

结果证明我将其配置为使用Gradle测试运行器而不是IntelliJ,后者不显示自定义显示名称。解决方案是进入IntelliJ设置->构建,执行,部署-> Gradle,然后在“使用...运行测试”下选择“ IntelliJ IDEA”

感谢JBNizet指出显示名称应该显示在Gradle生成的HTML测试报告中,而不显示在命令行中,这有助于我确定这是IntelliJ特有的问题。

答案 1 :(得分:1)

这是因为IntelliJ默认情况下使用gradle测试运行程序,并且不允许自定义显示名称。

该解决方案非常简单,只需要将默认的测试运行器从“ Gradle”更改为“ IntelliJ Idea”即可。

  • 首选项
  • 构建,执行,部署
  • 构建工具
  • Gradle
  • 使用= IntelliJ Idea运行测试

How to change default test runner in IntelliJ Idea

答案 2 :(得分:0)

Thests showing properly

对我来说,事实是,在我取消了这篇文章中建议的更改并选择了绿色播放按钮右侧的复选图标后,测试的描述开始显示。