gradle - 为什么 @DisplayName 在 JUnit 5 中不为我工作?
问题描述
出于某种原因,我真的很难让显示名称在带有 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
),这特别烦人。
解决方案
终于想通了。这是一个 IntelliJ 配置问题。(显然,显示名称永远不会显示在命令行中。)
结果我把它配置为使用 Gradle 测试运行器而不是 IntelliJ 运行器,它不显示自定义显示名称。解决方案是进入 IntelliJ 设置 -> 构建、执行、部署 -> Gradle 并在“使用运行测试”下选择“IntelliJ IDEA”
感谢 JBNizet 指出显示名称应该显示在 Gradle 生成的 HTML 测试报告中,而不是在命令行中,这帮助我确定这是一个特定于 IntelliJ 的问题。
推荐阅读
- google-analytics - 谷歌分析数据集从头开始
- java - 带有多个错误消息的 Spring 休眠类型验证
- dialogflow-es - 使用 AWS Lex 和 Dialogflow 构建具有不同 webhook 的类似机器人
- laravel - 使用 Laravel 和 Swagger / OpenAPI 的工作流程
- javascript - 猫鼬动态条件推送返回为 [object]
- python - 在 Python 中创建一个矩阵来存储字符串字符的最右边的索引
- c# - 添加 Authorize 属性时 Web api 核心返回 404
- dart - 桶填充颤动
- python - 有时不严格遵守使用 GLOP_LINEAR_PROGRAMMING 的约束
- android - Android Stripe 应用程序在添加新支付源时崩溃