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 ) } }
测试进程可以在调试模式下启动(参见 Test.getDebug()
),通过在调用构建时提供 `--debug-jvm` 开关以特殊方式启动。
gradle someTestTask --debug-jvm
属性 | 描述 |
allJvmArgs (所有 JVM 参数) | 用于启动进程 JVM 的完整参数集。 这包括用于定义系统属性、最小/最大堆大小和引导类路径的参数。 |
binaryResultsDirectory (二进制结果目录) | 用于内部二进制格式测试结果的根目录属性。 |
bootstrapClasspath (引导类路径) | 用于进程的引导类路径。 当此 classpath 为空时,将使用 JVM 的默认引导类路径。 |
classpath (类路径) | 用于执行测试的类路径。 |
debug (调试) | 确定是否为测试进程启用调试。 启用时 — |
debugOptions (调试选项) | 进程的 Java 调试线协议属性。 如果启用,则 |
dryRun (空运行) | 孵化中 指示此任务是否将跳过单个测试执行。 |
enableAssertions (启用断言) | 如果为进程启用了断言,则返回 true。 |
environment (环境变量) | 用于进程的环境变量。 默认为此进程的环境。 |
excludes (排除) | 测试执行的排除模式。 |
executable (可执行文件) | 要使用的可执行文件的名称。 |
failFast (快速失败) | 指示此任务是否在第一个失败的测试时失败 |
forkEvery (每次 fork) | 在 fork 的测试进程中执行的最大测试类数。 达到此限制时,将重新启动 fork 的测试进程。 |
ignoreFailures (忽略失败) | 指定当此任务执行的验证失败时,构建是否应中断。 |
includes (包含) | 测试执行的包含模式。 |
javaLauncher (Java 启动器) | 配置用于运行测试的 Java 可执行文件。 |
jvmArgs (JVM 参数) | 用于启动进程 JVM 的额外参数。 不包括系统属性和最小/最大堆大小。 |
jvmArgumentProviders (JVM 参数提供器) | 用于 fork 的 java 进程的命令行参数提供器。 |
maxHeapSize (最大堆大小) | 进程的最大堆大小(如果有)。 |
maxParallelForks (最大并行 Fork 数) | 要并行启动的最大测试进程数。 |
minHeapSize (最小堆大小) | 进程的最小堆大小(如果有)。 |
modularity (模块化) | 此测试任务的模块路径处理。 |
options (选项) | 返回测试框架特定的选项。 确保在使用此方法之前调用 |
reports (报告) | 此任务可能生成的报告。 |
scanForTestClasses (扫描测试类) | 指定是否应检测测试类。 当 |
systemProperties (系统属性) | 将用于进程的系统属性。 |
testClassesDirs (测试类目录) | 编译后的测试源的目录。 |
testLogging (测试日志) | 允许设置与哪些测试事件记录到控制台以及记录的详细程度相关的选项。 例如,要显示有关异常的更多信息,请使用 |
workingDir (工作目录) | 进程的工作目录。 默认为项目目录。 |
属性 | 描述 |
jacoco (jacoco) | 由 jacoco 插件添加的 |
方法 | 描述 |
addTestListener(listener) (添加测试监听器(listener)) | 向此任务注册一个测试监听器。 还可以考虑以下便捷方法,以便更快地挂钩到测试执行: |
addTestOutputListener(listener) (添加测试输出监听器(listener)) | 向此任务注册一个输出监听器。 挂钩到输出事件的更快方法是使用 |
afterSuite(closure) (suite 后) | 添加一个闭包,以便在测试套件执行后收到通知。 |
afterTest(closure) (测试后) | 添加一个闭包,以便在测试执行后收到通知。 |
beforeSuite(closure) (suite 前) | 添加一个闭包,以便在测试套件执行之前收到通知。 |
beforeTest(closure) (测试前) | 添加一个闭包,以便在测试执行之前收到通知。 |
bootstrapClasspath(classpath) (引导类路径(classpath)) | 将给定的值添加到进程的引导类路径的末尾。 |
copyTo(target) (复制到(target)) | 将这些选项复制到给定的选项。 |
copyTo(target) (复制到(target)) | 将这些选项复制到给定的目标选项。 |
debugOptions(action) (调试选项(action)) | 配置进程的 Java 调试线协议属性。 如果启用了 |
environment(name, value) (环境变量(name, value)) | 向此进程的环境添加一个环境变量。 |
environment(environmentVariables) (环境变量(environmentVariables)) | 向此进程的环境添加一些环境变量。 |
exclude(excludeSpec) (排除(excludeSpec)) | 添加一个排除规范。 可以多次调用此方法以附加新规范。 给定的闭包传递一个 |
exclude(excludes) (排除(excludes)) | 为测试类目录中的文件添加排除模式(例如 '**/*Test.class')。 |
exclude(excludes) (排除(excludes)) | 为测试类目录中的文件添加排除模式(例如 '**/*Test.class')。 |
exclude(excludeSpec) (排除(excludeSpec)) | 添加一个排除规范。 可以多次调用此方法以附加新规范。 如果未提供排除项,则不会排除任何文件。 如果提供了排除项,则文件不得与任何要处理的排除模式匹配。 |
executable(executable) (可执行文件(executable)) | 设置要使用的可执行文件的名称。 |
include(includeSpec) (包含(includeSpec)) | 添加一个包含规范。 可以多次调用此方法以附加新规范。 给定的闭包传递一个 |
include(includes) (包含(includes)) | 为测试类目录中的文件添加包含模式(例如 '**/*Test.class')。 |
include(includes) (包含(includes)) | 为测试类目录中的文件添加包含模式(例如 '**/*Test.class')。 |
include(includeSpec) (包含(includeSpec)) | 添加一个包含规范。 可以多次调用此方法以附加新规范。 如果未提供包含项,则将包含此容器中的所有文件。 如果提供了包含项,则文件必须与至少一个包含模式或规范匹配才能包含在内。 |
jvmArgs(arguments) (JVM 参数(arguments)) | 添加一些用于启动进程 JVM 的参数。 |
jvmArgs(arguments) (JVM 参数(arguments)) | 添加一些用于启动进程 JVM 的参数。 |
onOutput(closure) (输出时) | 添加一个闭包,以便在收到来自测试的输出时收到通知。 |
options(testFrameworkConfigure) (选项(testFrameworkConfigure)) | 配置测试框架特定的选项。 |
removeTestListener(listener) (移除测试监听器(listener)) | 从此任务取消注册测试监听器。 此方法仅删除通过在此任务上调用 |
removeTestOutputListener(listener) (移除测试输出监听器(listener)) | 从此任务取消注册测试输出监听器。 此方法仅删除通过在此任务上调用 |
reports(configureAction) (报告(configureAction)) | 配置此任务可能生成的报告。 |
setTestNameIncludePatterns(testNamePattern) (设置测试名称包含模式(testNamePattern)) | 设置要包含在执行中的测试名称模式。 支持类或方法名称,支持通配符 '*'。 有关更多信息,请参阅用户指南中关于测试的章节。 有关支持的模式的更多信息,请参阅 |
systemProperties(properties) (系统属性(properties)) | 添加一些要用于进程的系统属性。 |
useJUnit (使用 JUnit)() | 指定应使用 JUnit4 来发现和执行测试。 |
useJUnit(testFrameworkConfigure) (使用 JUnit(testFrameworkConfigure)) | 指定应使用 JUnit4 来发现和执行测试,并带有额外的配置。 |
useJUnit(testFrameworkConfigure) (使用 JUnit(testFrameworkConfigure)) | 指定应使用 JUnit4 来发现和执行测试,并带有额外的配置。 |
useJUnitPlatform (使用 JUnit Platform)() | 指定应使用 JUnit Platform 来发现和执行测试。 |
useJUnitPlatform(testFrameworkConfigure) (使用 JUnit Platform(testFrameworkConfigure)) | 指定应使用 JUnit Platform 来发现和执行测试,并带有额外的配置。 |
useTestNG (使用 TestNG)() | 指定应使用 TestNG 来发现和执行测试。 |
useTestNG(testFrameworkConfigure) (使用 TestNG(testFrameworkConfigure)) | 指定应使用 TestNG 来发现和执行测试,并带有额外的配置。 |
useTestNG(testFrameworkConfigure) (使用 TestNG(testFrameworkConfigure)) | 指定应使用 TestNG 来发现和执行测试,并带有额外的配置。 |
workingDir(dir) (工作目录(dir)) | 设置进程的工作目录。 提供的参数按照 |
块 | 描述 |
options (选项) | 配置测试框架特定的选项。 |
块 | 描述 |
jacoco (jacoco) | 配置由 jacoco 插件添加的 |
DirectoryProperty
binaryResultsDirectory
(二进制结果目录)
用于内部二进制格式测试结果的根目录属性。
- 默认值
project.testResultsDir
/binary/task.name
FileCollection
bootstrapClasspath
(引导类路径)
用于进程的引导类路径。 当此 classpath 为空时,将使用 JVM 的默认引导类路径。
- 带有
java
插件的默认值 []
FileCollection
classpath
(类路径)
用于执行测试的类路径。
- 带有
java
插件的默认值 project.sourceSets.test.runtimeClasspath (project.sourceSets.test.runtimeClasspath)
确定是否为测试进程启用调试。 启用时 — debug = true
— 进程将在挂起状态下启动,监听端口 5005。 调试时应禁用并行测试执行,如果为 Test.getForkEvery()
使用非零值,则需要偶尔重新连接调试器。
自 Gradle 5.6 起,您可以通过 JavaForkOptions.debugOptions(org.gradle.api.Action)
配置端口和其他 Java 调试属性。
- 带有
java
插件的默认值 false (false)
JavaDebugOptions
debugOptions
(调试选项) (只读)
进程的 Java 调试线协议属性。 如果启用,则 -agentlib:jdwp=...
将附加到 JVM 参数,并使用来自参数的配置。
注意:此属性是 孵化中 的,并且可能在 Gradle 的未来版本中更改。
指示此任务是否将跳过单个测试执行。
对于 JUnit 4 和 5,这将报告本应作为跳过的测试。 对于 TestNG,这将报告本应作为通过的测试。
仅支持支持原生空运行的 TestNG 版本,即 TestNG 6.14 或更高版本。
在 fork 的测试进程中执行的最大测试类数。 达到此限制时,将重新启动 fork 的测试进程。
默认情况下,Gradle 在执行测试时自动使用单独的 JVM。
- 值为
0
(无限制)表示为所有测试类重用测试进程。 这是默认值。 - 值为
1
表示为每个测试类启动一个新的测试进程。 这非常昂贵。 - 值为
N
表示在N
个测试类之后启动一个新的测试进程。
由于停止和启动每个测试进程的成本,此属性可能对性能产生很大影响。 从默认值更改此属性是不寻常的。
- 带有
java
插件的默认值 0
Property
<JavaLauncher
>
javaLauncher
(Java 启动器)
Property
<JavaLauncher
>配置用于运行测试的 Java 可执行文件。
- 带有
java
插件的默认值 java.toolchain (java.toolchain)
List
<CommandLineArgumentProvider
>
jvmArgumentProviders
(JVM 参数提供器) (只读)
List
<CommandLineArgumentProvider
>用于 fork 的 java 进程的命令行参数提供器。
- 带有
java
插件的默认值 []
要并行启动的最大测试进程数。
默认情况下,Gradle 一次执行一个测试类。
- 值为
1
表示一次只在一个测试进程中执行一个测试类。 这是默认值。 - 值为
N
表示最多将启动N
个测试进程来执行测试类。 这可以通过并行运行多个测试类来提高测试执行时间。
此属性不能超过当前构建的最大 worker 数值。 Gradle 还会限制所有 Test
任务中启动的测试进程数。
- 带有
java
插件的默认值 1
ModularitySpec
modularity
(模块化) (只读)
此测试任务的模块路径处理。
TestFrameworkOptions
options
(选项) (只读)
返回测试框架特定的选项。 确保在使用此方法之前调用 Test.useJUnit()
、Test.useJUnitPlatform()
或 Test.useTestNG()
。
TestTaskReports
reports
(报告) (只读)
此任务可能生成的报告。
指定是否应检测测试类。 当 true
时,将扫描与包含和排除模式匹配的类以查找测试类,并执行找到的任何类。 当 false
时,将执行与包含和排除模式匹配的类。
- 带有
java
插件的默认值 true (true)
FileCollection
testClassesDirs
(测试类目录)
编译后的测试源的目录。
- 带有
java
插件的默认值 project.sourceSets.test.output.classesDirs (project.sourceSets.test.output.classesDirs)
TestLoggingContainer
testLogging
(测试日志) (只读)
允许设置与哪些测试事件记录到控制台以及记录的详细程度相关的选项。 例如,要显示有关异常的更多信息,请使用
apply plugin: 'java' test.testLogging { exceptionFormat = "full" }
有关更多信息,请参阅 TestLoggingContainer
。
JacocoTaskExtension
jacoco
(jacoco) (只读)
由 jacoco 插件添加的 JacocoTaskExtension
。
void
addTestListener
(TestListener
listener) (添加测试监听器(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) (添加测试输出监听器(TestOutputListener
listener))
向此任务注册一个输出监听器。 挂钩到输出事件的更快方法是使用 AbstractTestTask.onOutput(groovy.lang.Closure)
方法。
添加一个闭包,以便在测试套件执行后收到通知。 TestDescriptor
和 TestResult
实例作为参数传递给闭包。
此方法也在所有测试套件执行后调用。 提供的描述符将具有 null 父套件。
添加一个闭包,以便在测试执行后收到通知。 TestDescriptor
和 TestResult
实例作为参数传递给闭包。
添加一个闭包,以便在测试套件执行之前收到通知。 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 } }
If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
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
>配置测试框架特定的选项。
When a Test
task is created outside of Test Suites, you should call Test.useJUnit()
, Test.useJUnitPlatform()
or Test.useTestNG()
before using this method. If no test framework has been set, the task will assume 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 来发现和执行测试,并带有额外的配置。
The supplied action configures an instance of JUnitOptions
.
void
useJUnit
(Action
<? super JUnitOptions
>
testFrameworkConfigure)
Action
<? super JUnitOptions
>指定应使用 JUnit4 来发现和执行测试,并带有额外的配置。
The supplied action configures an instance of JUnitOptions
.
指定应使用 JUnit Platform 来发现和执行测试。
Use this option if your tests use JUnit Jupiter/JUnit5.
JUnit Platform supports multiple test engines, which allows other testing frameworks to be built on top of it. You may need to use this option even if you are not using JUnit directly.
void
useJUnitPlatform
(Action
<? super JUnitPlatformOptions
>
testFrameworkConfigure)
Action
<? super JUnitPlatformOptions
>指定应使用 JUnit Platform 来发现和执行测试,并带有额外的配置。
Use this option if your tests use JUnit Jupiter/JUnit5.
JUnit Platform supports multiple test engines, which allows other testing frameworks to be built on top of it. You may need to use this option even if you are not using JUnit directly.
The supplied action configures an instance of JUnitPlatformOptions
.
void
useTestNG
(Closure
testFrameworkConfigure)
指定应使用 TestNG 来发现和执行测试,并带有额外的配置。
The supplied action configures an instance of TestNGOptions
.
void
useTestNG
(Action
<? super TestNGOptions
>
testFrameworkConfigure)
Action
<? super TestNGOptions
>指定应使用 TestNG 来发现和执行测试,并带有额外的配置。
The supplied action configures an instance of TestNGOptions
.
设置进程的工作目录。 提供的参数按照 Project.file(java.lang.Object)
进行评估。
配置测试框架特定的选项。
When a Test
task is created outside of Test Suites, you should call Test.useJUnit()
, Test.useJUnitPlatform()
or Test.useTestNG()
before using this method. If no test framework has been set, the task will assume JUnit4.
- 委托给
TestFrameworkOptions
fromoptions