測試

API 文件測試

執行 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

確定是否為測試程序啟用偵錯。 啟用時 — debug = true — 程序將在暫停狀態下啟動,並監聽 5005 端口。 偵錯時應停用並行測試執行,如果為 Test.getForkEvery() 使用非零值,則需要偶爾重新連接偵錯器。

debugOptions

程序的 Java 偵錯線路協定屬性。 如果啟用,則 -agentlib:jdwp=... 將附加到 JVM 參數,並使用來自參數的設定。

dryRun
開發中

指示此任務是否將跳過個別測試執行。

enableAssertions

如果為程序啟用斷言,則傳回 true。

environment

用於程序的環境變數。 預設為此程序的環境。

excludes

測試執行的排除模式。

executable

要使用的可執行檔名稱。

failFast

指示此任務是否將在第一個失敗的測試時失敗

forkEvery

在分叉測試程序中執行的最大測試類別數。 當達到此限制時,將重新啟動分叉測試程序。

ignoreFailures

指定當此任務執行的驗證失敗時,建置是否應中斷。

includes

測試執行的包含模式。

javaLauncher

設定要用於執行測試的 java 可執行檔。

jvmArgs

用於啟動程序 JVM 的額外參數。 不包括系統屬性和最小/最大堆積大小。

jvmArgumentProviders

要分叉的 java 程序的命令列參數提供者。

maxHeapSize

程序的堆積大小上限(如有)。

maxParallelForks

要並行啟動的最大測試程序數。

minHeapSize

程序的堆積大小下限(如有)。

modularity

此測試任務的模組路徑處理。

options

傳回測試框架特定選項。 在使用此方法之前,請務必調用 Test.useJUnit()Test.useJUnitPlatform()Test.useTestNG()

reports

此任務可能產生的報告。

scanForTestClasses

指定是否應偵測測試類別。 當 true 時,會掃描符合包含和排除模式的類別以查找測試類別,並執行找到的任何類別。 當 false 時,將執行符合包含和排除模式的類別。

systemProperties

將用於程序的系統屬性。

testClassesDirs

編譯後測試原始碼的目錄。

testLogging

允許設定與哪些測試事件記錄到主控台以及詳細程度相關的選項。 例如,要顯示有關異常的更多資訊,請使用

workingDir

程序的工作目錄。 預設為專案目錄。

jacoco 外掛程式新增的屬性

屬性描述
jacoco

由 jacoco 外掛程式新增的 JacocoTaskExtension

方法

方法描述
addTestListener(listener)

在此任務中註冊測試監聽器。 另請考慮以下便捷方法,以便更快地掛鉤到測試執行: AbstractTestTask.beforeTest(groovy.lang.Closure)AbstractTestTask.afterTest(groovy.lang.Closure)AbstractTestTask.beforeSuite(groovy.lang.Closure)AbstractTestTask.afterSuite(groovy.lang.Closure)

addTestOutputListener(listener)

在此任務中註冊輸出監聽器。 更快掛鉤到輸出事件的方法是使用 AbstractTestTask.onOutput(groovy.lang.Closure) 方法。

afterSuite(closure)

新增一個閉包,以便在測試套件執行後收到通知。 TestDescriptorTestResult 實例作為參數傳遞給閉包。

afterTest(closure)

新增一個閉包,以便在測試執行後收到通知。 TestDescriptorTestResult 實例作為參數傳遞給閉包。

beforeSuite(closure)

新增一個閉包,以便在測試套件執行前收到通知。 TestDescriptor 實例作為參數傳遞給閉包。

beforeTest(closure)

新增一個閉包,以便在測試執行前收到通知。 TestDescriptor 實例作為參數傳遞給閉包。

bootstrapClasspath(classpath)

將給定值新增到程序啟動類別路徑的末端。

copyTo(target)

將這些選項複製到給定的選項。

copyTo(target)

將這些選項複製到給定的目標選項。

debugOptions(action)

設定程序的 Java 偵錯線路協定屬性。 如果啟用 JavaForkOptions.setDebug(boolean),則 -agentlib:jdwp=... 將附加到 JVM 參數,並使用來自參數的設定。

environment(name, value)

為此程序的環境新增環境變數。

environment(environmentVariables)

為此程序的環境新增一些環境變數。

exclude(excludeSpec)

新增排除規格。 可以多次調用此方法以附加新規格。給定的閉包會傳遞一個 FileTreeElement 作為其參數。 閉包應傳回 true 或 false。 範例

exclude(excludes)

新增測試類別目錄中檔案的排除模式(例如 '**/*Test.class')。

exclude(excludes)

新增測試類別目錄中檔案的排除模式(例如 '**/*Test.class')。

exclude(excludeSpec)

新增排除規格。 可以多次調用此方法以附加新規格。如果未提供排除項,則不會排除任何檔案。 如果提供了排除項,則檔案不得與任何排除模式匹配才能進行處理。

executable(executable)

設定要使用的可執行檔名稱。

include(includeSpec)

新增包含規格。 可以多次調用此方法以附加新規格。給定的閉包會傳遞一個 FileTreeElement 作為其參數。 如果未提供包含項,則將包含此容器中的所有檔案。 如果提供了包含項,則檔案必須與至少一個包含模式或規格匹配才能包含在內。

include(includes)

新增測試類別目錄中檔案的包含模式(例如 '**/*Test.class')。

include(includes)

新增測試類別目錄中檔案的包含模式(例如 '**/*Test.class')。

include(includeSpec)

新增包含規格。 可以多次調用此方法以附加新規格。如果未提供包含項,則將包含此容器中的所有檔案。 如果提供了包含項,則檔案必須與至少一個包含模式或規格匹配才能包含在內。

jvmArgs(arguments)

新增一些用於啟動程序 JVM 的參數。

jvmArgs(arguments)

新增一些用於啟動程序 JVM 的參數。

onOutput(closure)

新增一個閉包,以便在收到來自測試的輸出時收到通知。 TestDescriptorTestOutputEvent 實例作為參數傳遞給閉包。

options(testFrameworkConfigure)

設定測試框架特定選項。

removeTestListener(listener)

從此任務取消註冊測試監聽器。 此方法僅移除通過調用此任務上的 AbstractTestTask.addTestListener(org.gradle.api.tasks.testing.TestListener) 新增的監聽器。 如果監聽器是使用 Gradle.addListener(java.lang.Object) 在 Gradle 中註冊的,則此方法將不執行任何操作。 請改用 Gradle.removeListener(java.lang.Object)

removeTestOutputListener(listener)

從此任務取消註冊測試輸出監聽器。 此方法僅移除通過調用此任務上的 AbstractTestTask.addTestOutputListener(org.gradle.api.tasks.testing.TestOutputListener) 新增的監聽器。 如果監聽器是使用 Gradle.addListener(java.lang.Object) 在 Gradle 中註冊的,則此方法將不執行任何操作。 請改用 Gradle.removeListener(java.lang.Object)

reports(configureAction)

設定此任務可能產生的報告。

setTestNameIncludePatterns(testNamePattern)

設定要包含在執行中的測試名稱模式。 支援類別或方法名稱,支援萬用字元 '*'。 有關更多資訊,請參閱使用者指南中有關測試的章節。 有關支援模式的更多資訊,請參閱 TestFilter

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)

設定程序的工作目錄。 提供的參數會根據 Project.file(java.lang.Object) 進行評估。

腳本區塊

區塊描述
options

設定測試框架特定選項。

jacoco 外掛程式新增的腳本區塊

區塊描述
jacoco

設定由 jacoco 外掛程式新增的 JacocoTaskExtension

屬性詳細資訊

List<String> allJvmArgs

用於啟動程序 JVM 的完整參數集。 這包括用於定義系統屬性、最小/最大堆積大小和啟動類別路徑的參數。

DirectoryProperty binaryResultsDirectory

內部二進制格式的測試結果根目錄屬性。

預設值
project.testResultsDir/binary/task.name

FileCollection bootstrapClasspath

用於程序的啟動類別路徑。 當此類別路徑為空時,將使用 JVM 的預設啟動類別路徑。

預設值 (使用 java 外掛程式時)
[]

FileCollection classpath

用於執行測試的類別路徑。

預設值 (使用 java 外掛程式時)
project.sourceSets.test.runtimeClasspath

boolean debug

確定是否為測試程序啟用偵錯。 啟用時 — debug = true — 程序將在暫停狀態下啟動,並監聽 5005 端口。 偵錯時應停用並行測試執行,如果為 Test.getForkEvery() 使用非零值,則需要偶爾重新連接偵錯器。

自 Gradle 5.6 起,您可以通過 JavaForkOptions.debugOptions(org.gradle.api.Action) 設定端口和其他 Java 偵錯屬性。

預設值 (使用 java 外掛程式時)
false

JavaDebugOptions debugOptions (唯讀)

程序的 Java 偵錯線路協定屬性。 如果啟用,則 -agentlib:jdwp=... 將附加到 JVM 參數,並使用來自參數的設定。

注意:此屬性為開發中,並且可能會在 Gradle 的未來版本中變更。

指示此任務是否將跳過個別測試執行。

對於 JUnit 4 和 5,這將報告本應執行但跳過的測試。 對於 TestNG,這將報告本應執行但通過的測試。

僅支援支援原生空跑的 TestNG 版本,即 TestNG 6.14 或更高版本。

boolean enableAssertions

如果為程序啟用斷言,則傳回 true。

預設值 (使用 java 外掛程式時)
true

Map<String, Object> environment

用於程序的環境變數。 預設為此程序的環境。

預設值 (使用 java 外掛程式時)
目前程序的環境

Set<String> excludes

測試執行的排除模式。

預設值 (使用 java 外掛程式時)
[]

String executable

要使用的可執行檔名稱。

預設值 (使用 java 外掛程式時)
java 目前 JVM 的指令。

boolean failFast

指示此任務是否將在第一個失敗的測試時失敗

預設值 (使用 java 外掛程式時)
false

long forkEvery

在分叉測試程序中執行的最大測試類別數。 當達到此限制時,將重新啟動分叉測試程序。

預設情況下,Gradle 在執行測試時會自動使用單獨的 JVM。

  • 0(無限制)表示為所有測試類別重複使用測試程序。 這是預設值。
  • 1 表示為每個測試類別啟動新的測試程序。 這非常昂貴。
  • N 表示在 N 個測試類別後啟動新的測試程序。

由於停止和啟動每個測試程序的成本,此屬性可能會對效能產生很大的影響。 從預設值更改此屬性是不尋常的。

預設值 (使用 java 外掛程式時)
0

boolean ignoreFailures

指定當此任務執行的驗證失敗時,建置是否應中斷。

Set<String> includes

測試執行的包含模式。

預設值 (使用 java 外掛程式時)
[]

Property<JavaLauncher> javaLauncher

設定要用於執行測試的 java 可執行檔。

預設值 (使用 java 外掛程式時)
java.toolchain

List<String> jvmArgs

用於啟動程序 JVM 的額外參數。 不包括系統屬性和最小/最大堆積大小。

預設值 (使用 java 外掛程式時)
[]

List<CommandLineArgumentProvider> jvmArgumentProviders (唯讀)

要分叉的 java 程序的命令列參數提供者。

預設值 (使用 java 外掛程式時)
[]

String maxHeapSize

程序的堆積大小上限(如有)。

預設值 (使用 java 外掛程式時)
null

int maxParallelForks

要並行啟動的最大測試程序數。

預設情況下,Gradle 一次執行一個測試類別。

  • 1 表示一次僅在單個測試程序中執行單個測試類別。 這是預設值。
  • N 表示最多將啟動 N 個測試程序來執行測試類別。 這可以通過並行執行多個測試類別來提高測試執行時間。

此屬性不能超過目前建置的 max-workers 值。 Gradle 還將限制所有 Test 任務中啟動的測試程序數量。

預設值 (使用 java 外掛程式時)
1

String minHeapSize

程序的堆積大小下限(如有)。

預設值 (使用 java 外掛程式時)
null

ModularitySpec modularity (唯讀)

此測試任務的模組路徑處理。

TestFrameworkOptions options (唯讀)

傳回測試框架特定選項。 在使用此方法之前,請務必調用 Test.useJUnit()Test.useJUnitPlatform()Test.useTestNG()

TestTaskReports reports (唯讀)

此任務可能產生的報告。

boolean scanForTestClasses

指定是否應偵測測試類別。 當 true 時,會掃描符合包含和排除模式的類別以查找測試類別,並執行找到的任何類別。 當 false 時,將執行符合包含和排除模式的類別。

預設值 (使用 java 外掛程式時)
true

Map<String, Object> systemProperties

將用於程序的系統屬性。

預設值 (使用 java 外掛程式時)
[:]

FileCollection testClassesDirs

編譯後測試原始碼的目錄。

預設值 (使用 java 外掛程式時)
project.sourceSets.test.output.classesDirs

TestLoggingContainer testLogging (唯讀)

允許設定與哪些測試事件記錄到主控台以及詳細程度相關的選項。 例如,要顯示有關異常的更多資訊,請使用

apply plugin: 'java'

test.testLogging {
    exceptionFormat = "full"
}

更多資訊請參閱 TestLoggingContainer

File workingDir

程序的工作目錄。 預設為專案目錄。

預設值 (使用 java 外掛程式時)
project.projectDir

JacocoTaskExtension jacoco (唯讀)

由 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)

新增一個閉包,以便在測試套件執行後收到通知。 TestDescriptorTestResult 實例作為參數傳遞給閉包。

此方法也會在所有測試套件執行後調用。提供的描述符將具有 null 父套件。

void afterTest(Closure closure)

新增一個閉包,以便在測試執行後收到通知。 TestDescriptorTestResult 實例作為參數傳遞給閉包。

void beforeSuite(Closure closure)

新增一個閉包,以便在測試套件執行前收到通知。 TestDescriptor 實例作為參數傳遞給閉包。

此方法也會在任何測試套件執行之前調用。提供的描述符將具有 null 父套件。

void beforeTest(Closure closure)

新增一個閉包,以便在測試執行前收到通知。 TestDescriptor 實例作為參數傳遞給閉包。

Test bootstrapClasspath(Object... classpath)

將給定值新增到程序啟動類別路徑的末端。

Test copyTo(JavaForkOptions target)

將這些選項複製到給定的選項。

Test copyTo(ProcessForkOptions target)

將這些選項複製到給定的目標選項。

void debugOptions(Action<JavaDebugOptions> action)

設定程序的 Java 偵錯線路協定屬性。 如果啟用 JavaForkOptions.setDebug(boolean),則 -agentlib:jdwp=... 將附加到 JVM 參數,並使用來自參數的設定。

Test environment(String name, Object value)

為此程序的環境新增環境變數。

Test environment(Map<String, ?> environmentVariables)

為此程序的環境新增一些環境變數。

Test exclude(Closure excludeSpec)

新增排除規格。 可以多次調用此方法以附加新規格。給定的閉包會傳遞一個 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(Iterable<String> excludes)

新增測試類別目錄中檔案的排除模式(例如 '**/*Test.class')。

Test exclude(String... excludes)

新增測試類別目錄中檔案的排除模式(例如 '**/*Test.class')。

Test exclude(Spec<FileTreeElement> excludeSpec)

新增排除規格。 可以多次調用此方法以附加新規格。如果未提供排除項,則不會排除任何檔案。 如果提供了排除項,則檔案不得與任何排除模式匹配才能進行處理。

Test executable(Object executable)

設定要使用的可執行檔名稱。

Test include(Closure includeSpec)

新增包含規格。 可以多次調用此方法以附加新規格。給定的閉包會傳遞一個 FileTreeElement 作為其參數。 如果未提供包含項,則將包含此容器中的所有檔案。 如果提供了包含項,則檔案必須與至少一個包含模式或規格匹配才能包含在內。

Test include(Iterable<String> includes)

新增測試類別目錄中檔案的包含模式(例如 '**/*Test.class')。

Test include(String... includes)

新增測試類別目錄中檔案的包含模式(例如 '**/*Test.class')。

Test include(Spec<FileTreeElement> includeSpec)

新增包含規格。 可以多次調用此方法以附加新規格。如果未提供包含項,則將包含此容器中的所有檔案。 如果提供了包含項,則檔案必須與至少一個包含模式或規格匹配才能包含在內。

Test jvmArgs(Iterable<?> arguments)

新增一些用於啟動程序 JVM 的參數。

Test jvmArgs(Object... arguments)

新增一些用於啟動程序 JVM 的參數。

void onOutput(Closure closure)

新增一個閉包,以便在收到來自測試的輸出時收到通知。 TestDescriptorTestOutputEvent 實例作為參數傳遞給閉包。

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)

設定測試框架特定選項。

當在測試套件外部建立 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)

設定此任務可能產生的報告。

AbstractTestTask setTestNameIncludePatterns(List<String> testNamePattern)

設定要包含在執行中的測試名稱模式。 支援類別或方法名稱,支援萬用字元 '*'。 有關更多資訊,請參閱使用者指南中有關測試的章節。 有關支援模式的更多資訊,請參閱 TestFilter

Test systemProperties(Map<String, ?> properties)

新增一些用於程序的系統屬性。

void useJUnit()

指定應使用 JUnit4 來探索和執行測試。

void useJUnit(Closure testFrameworkConfigure)

指定應使用 JUnit4 來探索和執行測試,並帶有其他設定。

提供的 action 會配置一個 JUnitOptions 的實例。

void useJUnit(Action<? super JUnitOptions> testFrameworkConfigure)

指定應使用 JUnit4 來探索和執行測試,並帶有其他設定。

提供的 action 會配置一個 JUnitOptions 的實例。

void useJUnitPlatform()

指定應使用 JUnit Platform 來探索和執行測試。

如果您的測試使用 JUnit Jupiter/JUnit5,請使用此選項。

JUnit Platform 支援多個測試引擎,這允許在它之上構建其他測試框架。即使您沒有直接使用 JUnit,您可能也需要使用此選項。

void useJUnitPlatform(Action<? super JUnitPlatformOptions> testFrameworkConfigure)

指定應使用 JUnit Platform 來探索和執行測試,並帶有其他設定。

如果您的測試使用 JUnit Jupiter/JUnit5,請使用此選項。

JUnit Platform 支援多個測試引擎,這允許在它之上構建其他測試框架。即使您沒有直接使用 JUnit,您可能也需要使用此選項。

提供的 action 會配置一個 JUnitPlatformOptions 的實例。

void useTestNG()

指定應使用 TestNG 來探索和執行測試。

void useTestNG(Closure testFrameworkConfigure)

指定應使用 TestNG 來探索和執行測試,並帶有其他設定。

提供的 action 會配置一個 TestNGOptions 的實例。

void useTestNG(Action<? super TestNGOptions> testFrameworkConfigure)

指定應使用 TestNG 來探索和執行測試,並帶有其他設定。

提供的 action 會配置一個 TestNGOptions 的實例。

Test workingDir(Object dir)

設定程序的工作目錄。 提供的參數會根據 Project.file(java.lang.Object) 進行評估。

腳本區塊詳情

options { }

設定測試框架特定選項。

當在測試套件外部建立 Test 任務時,您應該在使用此方法之前調用 Test.useJUnit()Test.useJUnitPlatform()Test.useTestNG()。如果沒有設定測試框架,則任務將假設為 JUnit4。

jacoco { }

設定由 jacoco 外掛程式新增的 JacocoTaskExtension