API 文档 | Test |
---|
执行 JUnit (3.8.x, 4.x 或 5.x) 或 TestNG 测试。测试始终在(一个或多个)独立的 JVM 中运行。
以下示例展示了各种配置选项。
plugins { id("java-library") // adds 'test' task } test { // discover and execute JUnit4-based tests useJUnit() // discover and execute TestNG-based tests useTestNG() // discover and execute JUnit Platform-based tests useJUnitPlatform() // set a system property for the test JVM(s) systemProperty 'some.prop', 'value' // explicitly include or exclude tests include 'org/foo/**' exclude 'org/boo/**' // show standard out and standard error of the test JVM(s) on the console testLogging.showStandardStreams = true // set heap size for the test JVM(s) minHeapSize = "128m" maxHeapSize = "512m" // set JVM arguments for the test JVM(s) jvmArgs('-XX:MaxPermSize=256m') // listen to events in the test execution lifecycle beforeTest { descriptor -> logger.lifecycle("Running test: " + descriptor) } // fail the 'test' task on the first test failure failFast = true // skip an actual test execution dryRun = true // listen to standard out and standard error of the test JVM(s) onOutput { descriptor, event -> logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message ) } }
通过在调用构建时提供 --debug-jvm
开关,可以以即时方式启动测试进程的调试模式(参见 Test.getDebug()
)。
gradle someTestTask --debug-jvm
属性 | 描述 |
allJvmArgs | 用于启动进程 JVM 的完整参数集。这包括用于定义系统属性、最小/最大堆大小以及引导类路径的参数。 |
binaryResultsDirectory | 用于存放内部二进制格式测试结果的根目录属性。 |
bootstrapClasspath | 用于进程的引导类路径。当此类路径为空时,将使用 JVM 的默认引导类路径。 |
classpath | 用于执行测试的类路径。 |
debug | 确定测试进程是否启用调试。启用后(即 |
debugOptions | 用于进程的 Java 调试线协议属性。如果启用,则 |
dryRun | 孵化中 指示此任务是否会跳过单个测试执行。 |
enableAssertions | 如果进程启用了断言,则返回 true。 |
environment | 用于进程的环境变量。默认为此进程的环境。 |
excludes | 测试执行的排除模式。 |
executable | 要使用的可执行文件的名称。 |
failFast | 指示此任务是否在第一个失败的测试时立即失败 |
forkEvery | 在分叉的测试进程中执行的最大测试类数。达到此限制时,分叉的测试进程将重新启动。 |
ignoreFailures | 指定当此任务执行的验证失败时构建是否应该中断。 |
includes | 测试执行的包含模式。 |
javaLauncher | 配置用于运行测试的 Java 可执行文件。 |
jvmArgs | 用于启动进程 JVM 的额外参数。不包括系统属性以及最小/最大堆大小。 |
jvmArgumentProviders | 用于分叉 Java 进程的命令行参数提供者。 |
maxHeapSize | 进程的最大堆大小(如果有)。 |
maxParallelForks | 并行启动的最大测试进程数。 |
minHeapSize | 进程的最小堆大小(如果有)。 |
modularity | 此测试任务的模块路径处理方式。 |
options | 返回测试框架特定选项。在使用此方法之前,请确保调用 |
reports | 此任务可能生成的报告。 |
scanForTestClasses | 指定是否应该检测测试类。当 |
systemProperties | 将用于进程的系统属性。 |
testClassesDirs | 编译后的测试源目录。 |
testLogging | 允许设置与哪些测试事件被记录到控制台以及记录的详细程度相关的选项。例如,要显示更多关于异常的信息,可以使用 |
workingDir | 进程的工作目录。默认为项目目录。 |
属性 | 描述 |
jacoco | 由 jacoco 插件添加的 |
方法 | 描述 |
addTestListener(listener) | 向此任务注册一个测试监听器。还可以考虑使用以下便捷方法来更快地介入测试执行: |
addTestOutputListener(listener) | 向此任务注册一个输出监听器。更快介入输出事件的方式是使用 |
afterSuite(closure) | 添加一个闭包,以便在测试套件执行后通知。闭包的参数是一个 |
afterTest(closure) | 添加一个闭包,以便在测试执行后通知。闭包的参数是一个 |
beforeSuite(closure) | 添加一个闭包,以便在测试套件执行前通知。闭包的参数是一个 |
beforeTest(closure) | 添加一个闭包,以便在测试执行前通知。闭包的参数是一个 |
bootstrapClasspath(classpath) | 将给定值添加到进程的引导类路径末尾。 |
copyTo(target) | 将这些选项复制到给定选项。 |
copyTo(target) | 将这些选项复制到给定目标选项。 |
debugOptions(action) | 配置进程的 Java 调试线协议属性。如果启用了 |
environment(name, value) | 向此进程的环境添加一个环境变量。 |
environment(environmentVariables) | 向此进程的环境添加一些环境变量。 |
exclude(excludeSpec) | 添加一个排除规范。此方法可以多次调用以追加新的规范。给定的闭包将 |
exclude(excludes) | 添加测试类目录中文件的排除模式(例如 '**/*Test.class'))。 |
exclude(excludes) | 添加测试类目录中文件的排除模式(例如 '**/*Test.class'))。 |
exclude(excludeSpec) | 添加一个排除规范。此方法可以多次调用以追加新的规范。如果未提供排除项,则不会排除任何文件。如果提供了排除项,则文件不得匹配任何排除模式才能被处理。 |
executable(executable) | 设置要使用的可执行文件的名称。 |
include(includeSpec) | 添加一个包含规范。此方法可以多次调用以追加新的规范。给定的闭包将 |
include(includes) | 添加测试类目录中文件的包含模式(例如 '**/*Test.class'))。 |
include(includes) | 添加测试类目录中文件的包含模式(例如 '**/*Test.class'))。 |
include(includeSpec) | 添加一个包含规范。此方法可以多次调用以追加新的规范。如果未提供包含项,则此容器中的所有文件都将包含在内。如果提供了包含项,则文件必须至少匹配一个包含模式或规范才能被包含。 |
jvmArgs(arguments) | 添加一些参数用于启动进程的 JVM。 |
jvmArgs(arguments) | 添加一些参数用于启动进程的 JVM。 |
onOutput(closure) | 添加一个闭包,以便在收到测试输出时通知。闭包的参数是一个 |
options(testFrameworkConfigure) | 配置测试框架特定选项。 |
removeTestListener(listener) | 从此任务注销一个测试监听器。此方法仅移除通过调用此任务上的 |
removeTestOutputListener(listener) | 从此任务注销一个测试输出监听器。此方法仅移除通过调用此任务上的 |
reports(configureAction) | 配置此任务可能生成的报告。 |
setTestNameIncludePatterns(testNamePattern) | 设置要包含在执行中的测试名称模式。支持类名或方法名,支持通配符 '*'。有关更多信息,请参阅用户指南中的测试章节。有关受支持模式的更多信息,请参见 |
systemProperties(properties) | 添加一些系统属性用于进程。 |
useJUnit() | 指定应使用 JUnit4 来发现和执行测试。 |
useJUnit(testFrameworkConfigure) | 指定应使用 JUnit4 来发现和执行测试,并进行额外配置。 |
useJUnit(testFrameworkConfigure) | 指定应使用 JUnit4 来发现和执行测试,并进行额外配置。 |
useJUnitPlatform() | 指定应使用 JUnit Platform 来发现和执行测试。 |
useJUnitPlatform(testFrameworkConfigure) | 指定应使用 JUnit Platform 来发现和执行测试,并进行额外配置。 |
useTestNG() | 指定应使用 TestNG 来发现和执行测试。 |
useTestNG(testFrameworkConfigure) | 指定应使用 TestNG 来发现和执行测试,并进行额外配置。 |
useTestNG(testFrameworkConfigure) | 指定应使用 TestNG 来发现和执行测试,并进行额外配置。 |
workingDir(dir) | 设置进程的工作目录。提供的参数按 |
DirectoryProperty
binaryResultsDirectory
用于存放内部二进制格式测试结果的根目录属性。
- 默认值
project.testResultsDir
/binary/task.name
确定测试进程是否启用调试。启用后(即 debug = true
),进程会以挂起状态启动,并在端口 5005 上监听。调试时应禁用并行测试执行,并且如果您对 Test.getForkEvery()
使用非零值,则需要偶尔重新附加调试器。
从 Gradle 5.6 开始,您可以通过 JavaForkOptions.debugOptions(org.gradle.api.Action)
配置端口及其他 Java 调试属性。
- 使用
java
插件时的默认值 false
JavaDebugOptions
debugOptions
(read-only)
用于进程的 Java 调试线协议属性。如果启用,则 -agentlib:jdwp=...
将附加到 JVM 参数中,并使用参数中的配置。
注意:此属性处于孵化中,可能会在 Gradle 未来版本中更改。
指示此任务是否会跳过单个测试执行。
对于 JUnit 4 和 5,这会将本应执行的测试报告为跳过。对于 TestNG,这会将本应执行的测试报告为通过。
仅支持原生 Dry Run 的 TestNG 版本受支持,即 TestNG 6.14 或更高版本。
在分叉的测试进程中执行的最大测试类数。达到此限制时,分叉的测试进程将重新启动。
默认情况下,Gradle 在执行测试时会自动使用独立的 JVM。
- 值
0
(无限制)表示对所有测试类重用测试进程。这是默认设置。 - 值
1
表示为每个测试类启动一个新的测试进程。这非常耗时。 - 值
N
表示在执行N
个测试类后启动一个新的测试进程。
由于停止和启动每个测试进程的开销,此属性可能会对性能产生很大影响。通常不建议更改此属性的默认值。
- 使用
java
插件时的默认值 0
List
<CommandLineArgumentProvider
>
jvmArgumentProviders
(read-only)
List
<CommandLineArgumentProvider
>用于分叉 Java 进程的命令行参数提供者。
- 使用
java
插件时的默认值 []
并行启动的最大测试进程数。
默认情况下,Gradle 一次执行一个测试类。
- 值
1
表示一次只在单个测试进程中执行一个测试类。这是默认设置。 - 值
N
表示将启动最多N
个测试进程来执行测试类。这可以通过并行运行多个测试类来缩短测试执行时间。
此属性不能超过当前构建的 max-workers 值。Gradle 还会限制所有 Test
任务启动的测试进程数量。
- 使用
java
插件时的默认值 1
ModularitySpec
modularity
(read-only)
此测试任务的模块路径处理方式。
TestFrameworkOptions
options
(read-only)
返回测试框架特定选项。在使用此方法之前,请确保调用 Test.useJUnit()
、Test.useJUnitPlatform()
或 Test.useTestNG()
。
TestTaskReports
reports
(read-only)
此任务可能生成的报告。
指定是否应该检测测试类。当 true
时,会扫描匹配包含和排除模式的类以查找测试类,并执行找到的任何测试类。当 false
时,直接执行匹配包含和排除模式的类。
- 使用
java
插件时的默认值 true
TestLoggingContainer
testLogging
(read-only)
允许设置与哪些测试事件被记录到控制台以及记录的详细程度相关的选项。例如,要显示更多关于异常的信息,可以使用
apply plugin: 'java' test.testLogging { exceptionFormat = "full" }
更多信息请参见 TestLoggingContainer
。
JacocoTaskExtension
jacoco
(read-only)
由 jacoco 插件添加的 JacocoTaskExtension
。
void
addTestListener
(TestListener
listener)
向此任务注册一个测试监听器。还可以考虑使用以下便捷方法来更快地介入测试执行:AbstractTestTask.beforeTest(groovy.lang.Closure)
、AbstractTestTask.afterTest(groovy.lang.Closure)
、AbstractTestTask.beforeSuite(groovy.lang.Closure)
、AbstractTestTask.afterSuite(groovy.lang.Closure)
此监听器将不会收到由其他任务执行的测试的通知。要获得该行为,请使用 Gradle.addListener(java.lang.Object)
。
void
addTestOutputListener
(TestOutputListener
listener)
向此任务注册一个输出监听器。更快介入输出事件的方式是使用 AbstractTestTask.onOutput(groovy.lang.Closure)
方法。
void
afterSuite
(Closure
closure)
添加一个闭包,以便在测试套件执行后通知。闭包的参数是一个 TestDescriptor
和一个 TestResult
实例。
此方法在所有测试套件执行完毕后也会被调用。提供的描述符的父套件将为 null。
void
afterTest
(Closure
closure)
添加一个闭包,以便在测试执行后通知。闭包的参数是一个 TestDescriptor
和一个 TestResult
实例。
void
beforeSuite
(Closure
closure)
添加一个闭包,以便在测试套件执行前通知。闭包的参数是一个 TestDescriptor
实例。
此方法在任何测试套件执行之前也会被调用。提供的描述符的父套件将为 null。
void
beforeTest
(Closure
closure)
添加一个闭包,以便在测试执行前通知。闭包的参数是一个 TestDescriptor
实例。
Test
copyTo
(JavaForkOptions
target)
将这些选项复制到给定选项。
Test
copyTo
(ProcessForkOptions
target)
将这些选项复制到给定目标选项。
void
debugOptions
(Action
<JavaDebugOptions
>
action)
Action
<JavaDebugOptions
>配置进程的 Java 调试线协议属性。如果启用了 JavaForkOptions.setDebug(boolean)
,则 -agentlib:jdwp=...
将附加到 JVM 参数中,并使用参数中的配置。
添加一个排除规范。此方法可以多次调用以追加新的规范。给定的闭包将 FileTreeElement
作为参数传入。闭包应返回 true 或 false。示例
copySpec { from 'source' into 'destination' //an example of excluding files from certain configuration: exclude { it.file in configurations.someConf.files } }
如果未提供排除项,则不会排除任何文件。如果提供了排除项,则文件必须不匹配任何排除模式才能被处理。
Test
exclude
(Spec
<FileTreeElement
>
excludeSpec)
Spec
<FileTreeElement
>添加一个排除规范。此方法可以多次调用以追加新的规范。如果未提供排除项,则不会排除任何文件。如果提供了排除项,则文件不得匹配任何排除模式才能被处理。
添加一个包含规范。此方法可以多次调用以追加新的规范。给定的闭包将 FileTreeElement
作为参数传入。如果未提供包含项,则此容器中的所有文件都将包含在内。如果提供了包含项,则文件必须至少匹配一个包含模式或规范才能被包含。
Test
include
(Spec
<FileTreeElement
>
includeSpec)
Spec
<FileTreeElement
>添加一个包含规范。此方法可以多次调用以追加新的规范。如果未提供包含项,则此容器中的所有文件都将包含在内。如果提供了包含项,则文件必须至少匹配一个包含模式或规范才能被包含。
void
onOutput
(Closure
closure)
添加一个闭包,以便在收到测试输出时通知。闭包的参数是一个 TestDescriptor
和一个 TestOutputEvent
实例。
apply plugin: 'java' test { onOutput { descriptor, event -> if (event.destination == TestOutputEvent.Destination.StdErr) { logger.error("Test: " + descriptor + ", error: " + event.message) } } }
TestFrameworkOptions
options
(Action
<? super TestFrameworkOptions
>
testFrameworkConfigure)
Action
<? super TestFrameworkOptions
>配置测试框架特定选项。
在测试套件之外创建 Test 任务时,在使用此方法之前,应调用 Test.useJUnit()
、Test.useJUnitPlatform()
或 Test.useTestNG()
。如果未设置测试框架,任务将假定使用 JUnit4。
void
removeTestListener
(TestListener
listener)
从此任务注销一个测试监听器。此方法仅移除通过调用此任务上的 AbstractTestTask.addTestListener(org.gradle.api.tasks.testing.TestListener)
添加的监听器。如果监听器是使用 Gradle.addListener(java.lang.Object)
注册到 Gradle 的,此方法将不起作用。请改用 Gradle.removeListener(java.lang.Object)
。
void
removeTestOutputListener
(TestOutputListener
listener)
从此任务注销一个测试输出监听器。此方法仅移除通过调用此任务上的 AbstractTestTask.addTestOutputListener(org.gradle.api.tasks.testing.TestOutputListener)
添加的监听器。如果监听器是使用 Gradle.addListener(java.lang.Object)
注册到 Gradle 的,此方法将不起作用。请改用 Gradle.removeListener(java.lang.Object)
。
TestTaskReports
reports
(Action
<? super TestTaskReports
>
configureAction)
Action
<? super TestTaskReports
>配置此任务可能生成的报告。
AbstractTestTask
setTestNameIncludePatterns
(List
<String
>
testNamePattern)
List
<String
>设置要包含在执行中的测试名称模式。支持类名或方法名,支持通配符 '*'。有关更多信息,请参阅用户指南中的测试章节。有关受支持模式的更多信息,请参见 TestFilter
。
void
useJUnit
(Closure
testFrameworkConfigure)
指定应使用 JUnit4 来发现和执行测试,并进行额外配置。
提供的 action 会配置一个 JUnitOptions
实例。
void
useJUnit
(Action
<? super JUnitOptions
>
testFrameworkConfigure)
Action
<? super JUnitOptions
>指定应使用 JUnit4 来发现和执行测试,并进行额外配置。
提供的 action 会配置一个 JUnitOptions
实例。
指定应使用 JUnit Platform 来发现和执行测试。
如果您的测试使用 JUnit Jupiter/JUnit5,请使用此选项。
JUnit Platform 支持多种测试引擎,这使得可以在其之上构建其他测试框架。即使您不直接使用 JUnit,也可能需要使用此选项。
void
useJUnitPlatform
(Action
<? super JUnitPlatformOptions
>
testFrameworkConfigure)
Action
<? super JUnitPlatformOptions
>指定应使用 JUnit Platform 来发现和执行测试,并进行额外配置。
如果您的测试使用 JUnit Jupiter/JUnit5,请使用此选项。
JUnit Platform 支持多种测试引擎,这使得可以在其之上构建其他测试框架。即使您不直接使用 JUnit,也可能需要使用此选项。
提供的 action 会配置一个 JUnitPlatformOptions
实例。
void
useTestNG
(Closure
testFrameworkConfigure)
指定应使用 TestNG 来发现和执行测试,并进行额外配置。
提供的 action 会配置一个 TestNGOptions
实例。
void
useTestNG
(Action
<? super TestNGOptions
>
testFrameworkConfigure)
Action
<? super TestNGOptions
>指定应使用 TestNG 来发现和执行测试,并进行额外配置。
提供的 action 会配置一个 TestNGOptions
实例。
设置进程的工作目录。提供的参数按 Project.file(java.lang.Object)
进行评估。
配置测试框架特定选项。
在测试套件之外创建 Test 任务时,在使用此方法之前,应调用 Test.useJUnit()
、Test.useJUnitPlatform()
或 Test.useTestNG()
。如果未设置测试框架,任务将假定使用 JUnit4。
- 委托给
TestFrameworkOptions
来自options