Gradle 中的 JUnit 侦听器配置

JUnit Listener Configuration In Gradle

我是 Gradle 的新蜜蜂。拥有自定义 JUnit Listener,它读取自定义注释数据并生成报告,需要将其配置为 Gradle 的一部分。在 Gradle 4.4.

中是否有配置下面的 surefire 插件
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.18.1</version>
    <configuration>
        <properties>
            <property>
                <name>listener</name>
                <value>my.company.MyRunListener</value>
            </property>
        </properties>
    </configuration>
</plugin>

我明白,可能无法像 gradle 那样使用 maven 插件。我检查了 TestListener,它不支持读取注释以继续进行。

我想了解如何在 Gradle 中配置我的 JUnit 监听器。

恐怕目前不支持JUnit RunListeners in Gradle. There is only an open ticket requesting that feature: https://github.com/gradle/gradle/issues/1330

由于某人在那张票上有 mentioned in the comments,“主要问题 […] 是 Gradle 中缺少 TestDescriptor.getAnnotations()”;否则你 可能 已经能够将你的 RunListener 重写为 Gradle TestListener。因此,除非我在浏览票证时遗漏了一些东西,否则看来你现在大多运气不好:-(

JUnit Foundation library enables you to declare your listeners in a service provider configuration file, which are then attached automatically - regardless of execution environment. Details can be found here.

Gradle JUnit 基础配置

// build.gradle
...
apply plugin: 'maven'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
    mavenLocal()
    mavenCentral()
    ...
}
dependencies {
    ...
    compile 'com.nordstrom.tools:junit-foundation:12.2.0'
}
ext {
    junitFoundation = configurations.compile.resolvedConfiguration.resolvedArtifacts.find { it.name == 'junit-foundation' }
}
test.doFirst {
    jvmArgs "-javaagent:${junitFoundation.file}"
}
test {
//  debug true
    // not required, but definitely useful
    testLogging.showStandardStreams = true
}

ServiceLoader 提供商配置文件

# src/main/resources/META-INF/services/com.nordstrom.automation.junit.JUnitWatcher
com.example.MyRunListener

使用此配置,由 MyRunListener 实现的侦听器将自动附加到提供的 RunNotifier到 JUnit 运行程序的 run() 方法。此功能消除了各种测试执行环境(如 Maven、Gradle 和本机 IDE 测试运行器)之间的行为差​​异。