【问题标题】:Why isn't @DisplayName working for me in JUnit 5?为什么 @DisplayName 在 JUnit 5 中不为我工作?
【发布时间】:2019-11-23 20:48:21
【问题描述】:

出于某种原因,我真的很难让显示名称在带有 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 一起使用),这特别烦人。

【问题讨论】:

  • 我刚刚意识到这可能永远不会在 Gradle 运行器中工作。但它绝对应该在 IntelliJ 中工作,而且它也没有出现在那里。
  • 显示名称应该出现在 Gradle 生成的测试 html 报告中,以及 IntelliJ 的 JUnit 视图中(这里有)。请注意,在 Kotlin 中,通常不使用 DisplayName,而是在反引号之间使用方法名称:@Test fun `test name`()
  • @JBNizet 谢谢,它们都没有出现。实际上,我在大多数地方都使用反引号来做这件事,但我仍然希望能够为测试类设置显示名称(用于良好的嵌套)或动态生成的测试,但这些都不起作用。跨度>
  • @JBNizet 哦,我骗了你。它显示在 HTML 报告中,而不是 IntelliJ 中。嗯。

标签: gradle kotlin junit junit5


【解决方案1】:

终于想通了。这是一个 IntelliJ 配置问题。 (显然,显示名称永远不会显示在命令行中。)

原来我已将其配置为使用 Gradle 测试运行程序而不是 IntelliJ 运行程序,后者不显示自定义显示名称。解决方案是进入 IntelliJ 设置 -> 构建、执行、部署 -> Gradle 并在“使用运行测试”下选择“IntelliJ IDEA”

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

【讨论】:

  • 对我来说,我有 Intellj,但仍然看不到显示名称
  • @SanJaisy 只需确保重新启动 Intellij 以使更改生效。
  • 非常感谢瑞恩的这篇文章。我对此感到非常沮丧,因为它仍然对我不起作用。我在 Kotlin 中编写动态测试,可以在 HTML 报告中看到显示名称,但在 IntelliJ 中仍然看不到。我确实更改了设置 + 重新启动了 IDE。还有其他想法吗?
  • 我更新了关于在哪里可以找到选项的答案,但它也没有奏效。我仍然看不到显示名称
【解决方案2】:

这是因为 IntelliJ 默认使用 gradle 测试运行器,它不允许自定义显示名称。

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

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

How to change default test runner in IntelliJ Idea

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我设法通过使用配置使其在surefirereports中工作 在 https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit-platform.html#Surefire_Extensions_and_Reports_Configuration_for_.40DisplayName

      它显示这样的输出 “名称”来自@DisplayName

      【讨论】:

      • - - -
      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 2011-02-22
      • 1970-01-01
      • 2023-03-13
      • 2012-01-15
      相关资源
      最近更新 更多