XCTest 外掛程式提供了用於與 macOS 上的 XCTest 測試框架以及 Linux 的開源實作整合的 Task、配置和慣例。

用法

build.gradle.kts
plugins {
    xctest
}
build.gradle
plugins {
    id 'xctest'
}

建置變體

XCTest 外掛程式理解以下維度。 請閱讀 建置變體簡介 以取得更多資訊。

目標機器 - 預設為受測組件(如果存在)或建置主機(否則)

目標機器表示應用程式預期在哪種機器上執行。 目標機器由其作業系統和架構識別。 Gradle 使用目標機器來決定根據主機上的可用性選擇哪個工具鏈。

目標機器可以按如下方式配置

build.gradle.kts
xctest {
    targetMachines = listOf(machines.linux.x86_64, machines.macOS.x86_64)
}
build.gradle
xctest {
    targetMachines = [
        machines.linux.x86_64,
        machines.macOS.x86_64
    ]
}

Task

下圖顯示了此外掛程式新增的 Task 之間的關係。

xctest task graph
圖 1. XCTest 外掛程式預設 Task 圖

依變體而定的 Task

XCTest 外掛程式根據測試組件的變體建立 Task。 請閱讀 建置變體簡介 以取得更多資訊。 下圖顯示了依變體而定的 Task 之間的關係。

xctest variant task graph
圖 2. XCTest 外掛程式依變體而定的 Task 圖
compileTestVariantSwift (例如 compileTestSwift) - SwiftCompile

依賴於:所有向編譯貢獻原始碼檔案的 Task :: 使用選定的編譯器編譯 Swift 原始碼檔案。

linkTestVariant (例如 linkTest) - LinkMachOBundle (在 macOS 上) 或 LinkExecutable (在 Linux 上)

依賴於:所有向連結可執行檔貢獻的 Task,包括來自通過專案相依性和受測組件解析的專案的 linkVariantcreateVariant Task :: 使用選定的連結器從編譯後的物件檔案連結可執行檔。

installTestVariant (例如 installTest) - InstallXCTestBundle (在 macOS 上) 或 InstallExecutable (在 Linux 上)

依賴於:linkTestVariant 和所有向可執行檔的執行期貢獻的 Task,包括來自通過專案相依性解析的專案的 linkVariant Task :: 安裝可執行檔及其所有執行期相依性,以便於執行。

xcTestVariant (例如 xcTest) - XCTest

依賴於:installTestVariant :: 執行已安裝的可執行檔。

生命週期 Task

XCTest 外掛程式將其某些 Task 附加到 基礎外掛程式章節 中記錄的標準生命週期 Task — XCTest 外掛程式會自動應用這些 Task

assemble - Task (生命週期)

彙總 Task,用於組裝專案中目前主機的受測組件的 debug 變體(如果存在)。 例如,Swift Application 外掛程式Swift Library 外掛程式 將其連結和建立 Task 附加到此生命週期 Task。 此 Task 由 基礎外掛程式 新增。

test - Task (生命週期)

依賴於:與建置主機最接近匹配的 xcTestVariant :: 最接近匹配建置主機的變體的彙總 Task,用於測試組件。

check - Task (生命週期)

依賴於:test :: 執行驗證 Task 的彙總 Task,例如執行測試。 某些外掛程式將其自己的驗證 Task 新增到 check。 此 Task 由 基礎外掛程式 新增。

build - Task (生命週期)

依賴於:checkassemble :: 執行專案完整建置的彙總 Task。 此 Task 由 基礎外掛程式 新增。

clean - Delete

刪除建置目錄及其中的所有內容,即 layout.buildDirectory 專案屬性指定的路徑。 此 Task 由 基礎外掛程式 新增。

相依性管理

就像 XCTest 外掛程式建立的 Task 一樣,配置是根據應用程式組件的變體建立的。 請閱讀 建置變體簡介 以取得更多資訊。 下圖描述了 XCTest 外掛程式新增的配置

xctest configurations
圖 3. XCTest 外掛程式配置
  • 白色配置是用戶應該用來宣告相依性的配置

  • 藍色配置,也稱為可解析配置,以 (R) 表示,是組件內部的,供其自身使用

以下配置用於宣告相依性

testImplementation

用於宣告測試組件所有變體的實作相依性。 您應該在此處宣告任何變體的相依性。 請注意,此配置繼承在受測組件(函式庫或應用程式)上宣告的所有相依性。

testVariantExecutableImplementation (例如 testExecutableImplementation) 擴展了 testImplementation

用於宣告測試組件特定變體的實作相依性。 您應該在此處宣告特定變體的相依性。

沒有消費者可以使用的此外掛程式的配置。

以下配置由測試組件本身使用

swiftCompileTestVariant (例如 swiftCompileTest) 擴展了 testVariantExecutableImplementation

用於編譯測試組件。 此配置包含測試組件的編譯模組,因此在調用 Swift 編譯器來編譯它時使用。

nativeLinkTestVariant (例如 nativeLinkTest) 擴展了 testVariantExecutableImplementation

用於連結測試組件。 此配置包含測試組件的函式庫,因此在調用 Swift 連結器來連結它時使用。

nativeRuntimeTestVariant (例如 nativeRuntimeTest) 擴展了 testVariantExecutableImplementation

用於執行測試組件。 此配置包含測試組件的執行期函式庫。

慣例

XCTest 外掛程式為來源和 Task 新增了慣例,如下所示。

專案版面配置

XCTest 外掛程式假定專案版面配置如下所示。 這些目錄都不需要存在或包含任何內容。 XCTest 外掛程式將編譯它找到的任何內容,並處理任何遺失的內容。

src/test/swift

Swift 原始碼,副檔名為 .swift

您可以透過在 xctest 腳本區塊上配置 source配置專案版面配置

compileTestVariantSwift Task

XCTest 外掛程式為要建置的測試組件的每個變體新增一個 SwiftCompile 實例(例如 compileTestSwift)。 請閱讀 建置變體簡介 以取得更多資訊。 下面顯示了一些最常見的配置選項。

compilerArgs

[]

debuggable

true

modules

configurations.swiftCompileTestVariant

macros

[]

objectFileDir

layout.buildDirectory.dir("obj/test/$variant")

optimized

false

source

xctest.swiftSource

targetPlatform

衍生自二進制的 TargetMachine

toolChain

根據目標機器自動選取

XCTest 外掛程式在 macOS 上新增一個 LinkMachOBundle 實例,或在 Linux 上為測試組件的每個變體新增一個 LinkExecutable 實例 - 例如 linkTest。 請閱讀 建置變體簡介 以取得更多資訊。 下面顯示了一些最常見的配置選項。

macOS

debuggable

true

libs

configurations.nativeLinkTestVariant

linkedFile

layout.buildDirectory.dir("exe/test/$variant/module")

linkerArgs

[]

source

compileVariantSwift.objects(如果存在)+ compileTestVariantSwift.objects

targetPlatform

衍生自二進制的 TargetMachine

toolChain

根據目標機器自動選取

Linux

debuggable

true

libs

configurations.nativeLinkTestVariant

linkedFile

layout.buildDirectory.dir("exe/test/$variant/baseName")

linkerArgs

[]

source

compileVariantSwift.objects(如果存在)+ compileTestVariantSwift.objects

targetPlatform

衍生自二進制的 TargetMachine

toolChain

根據目標機器自動選取

installTestVariant Task

XCTest 外掛程式在 macOS 上新增一個 InstallXCTestBundle 實例,或在 Linux 上為測試組件的每個變體新增一個 InstallExecutable 實例 - 例如 installTest。 請閱讀 建置變體簡介 以取得更多資訊。 無需在 Task 上配置任何屬性。

xcTestVariant Task

XCTest 外掛程式為測試組件的每個變體新增一個 XCTest 實例 - 例如 xcTest。 請閱讀 建置變體簡介 以取得更多資訊。 下面顯示了一些最常見的配置選項。

binResultDir

layout.buildDirectory.dir("test-results/xctest/$variant/")

ignoreFailures

false

reports

layout.buildDirectory.dir("reports/tests/xctest/$variant/") (僅限 HTML)

runScriptFile

layout.buildDirectory.dir("install/test/$variant/${xctest.module}")

testInstallDirectory

layout.buildDirectory.dir("install/test/$variant/")

workingDirectory

layout.buildDirectory.dir("install/test/$variant/")