XCTest 外掛與設定快取不相容。

XCTest 外掛提供工作、設定和慣例,用於與 macOS 上的XCTest 測試架構以及Linux 的開放原始碼實作整合。

用法

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
    ]
}

工作

下列圖表顯示此外掛新增的工作之間的關係。

xctest task graph
圖 1. XCTest 外掛預設工作圖

變異依賴工作

XCTest 外掛程式會根據測試元件的變體建立工作。請閱讀 建置變體簡介 以取得更多資訊。下列圖示顯示變體相關工作之間的關聯性。

xctest variant task graph
圖 2. XCTest 外掛程式變體相關工作圖
compileTestVariantSwift (例如 compileTestSwift) - SwiftCompile

依賴項:所有會將來源檔案提供給編譯的工作 :: 使用所選編譯器編譯 Swift 來源檔案。

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

依賴項:所有會提供給連結可執行檔的工作,包括透過專案依賴關係解析的專案中的 linkVariantcreateVariant 工作,以及受測元件 :: 使用所選連結器連結編譯的物件檔案以產生可執行檔。

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

依賴項:linkTestVariant 和所有會提供給可執行檔執行時期依賴關係的工作,包括透過專案依賴關係解析的專案中的 linkVariant 工作 :: 安裝可執行檔及其所有執行時期依賴關係,以利執行。

xcTestVariant (例如 xcTest) - XCTest

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

生命週期工作

XCTest 外掛程式會將部分工作附加到 基礎外掛程式章節 中記載的標準生命週期工作,而 XCTest 外掛程式會自動套用這些工作。

assemble - 工作 (生命週期)

彙總工作,會在專案中針對目前的執行主機 (如果存在) 組合受測元件的偵錯變體。例如,Swift 應用程式外掛程式Swift 函式庫外掛程式 會將其連結和建立工作附加到此生命週期工作。此工作是由 基礎外掛程式 新增。

test - 工作 (生命週期)

依賴項:與建置執行主機最相符的 xcTestVariant :: 針對與建置執行主機最相符的變體彙總工作,以測試元件。

check - 工作 (生命週期)

依賴項:test :: 執行驗證工作(例如執行測試)的彙總工作。有些外掛程式會將自己的驗證工作新增到 check。此工作是由 基礎外掛程式 新增。

build - 工作 (生命週期)

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

clean - 刪除

刪除建置目錄及其中的所有內容,也就是 layout.buildDirectory 專案屬性所指定的路徑。此任務是由 基本外掛 所新增。

相依性管理

就像 XCTest 外掛所建立的任務一樣,組態是根據應用程式元件的變異建立的。請參閱 建置變異簡介,以取得更多資訊。下圖說明 XCTest 外掛所新增的組態

xctest configurations
圖 3. XCTest 外掛組態
  • 白色組態是使用者應該用來宣告相依性的組態

  • 藍色組態,也稱為可解析組態,以 (R) 表示,是元件內部專供元件本身使用的組態

下列組態用於宣告相依性

testImplementation

用於宣告測試元件所有變異的實作相依性。您應該在此宣告任何變異的相依性。請注意,此組態會繼承在受測元件 (函式庫或應用程式) 中宣告的所有相依性。

testVariantExecutableImplementation (例如 testExecutableImplementation) 會延伸 testImplementation

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

沒有任何組態可供消費者用於此外掛。

下列組態由測試元件本身使用

swiftCompileTestVariant (例如 swiftCompileTest) 會延伸 testVariantExecutableImplementation

用於編譯測試元件。此組態包含測試元件的編譯模組,因此在呼叫 Swift 編譯器進行編譯時會使用此組態。

nativeLinkTestVariant (例如 nativeLinkTest) 會延伸 testVariantExecutableImplementation

用於連結測試元件。此組態包含測試元件的函式庫,因此在呼叫 Swift 連結器進行連結時會使用此組態。

nativeRuntimeTestVariant (例如 nativeRuntimeTest) 會延伸 testVariantExecutableImplementation

用於執行測試元件。此組態包含測試元件的執行時期函式庫。

慣例

XCTest 外掛會新增來源和任務的慣例,如下所示。

專案配置

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

src/test/swift

Swift 原始碼,副檔名為 .swift

您可以透過設定 xctest 指令碼區塊中的 source,來設定專案配置

compileTestVariantSwift 任務

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 任務

XCTest 外掛程式會為每個測試元件變異新增一個 macOS 上的 InstallXCTestBundle 實例或 Linux 上的 InstallExecutable 實例(例如 installTest)。請參閱建置變異簡介以取得更多資訊。不需要在任務中設定任何屬性。

xcTestVariant 任務

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/")