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

链接器参数

[]

source

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

targetPlatform

从二进制文件的 TargetMachine 派生

toolChain

根据目标机器自动选择

Linux

debuggable

true

libs

configurations.nativeLinkTestVariant

linkedFile

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

链接器参数

[]

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

忽略失败

false

报告

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

runScriptFile

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

testInstallDirectory

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

工作目录

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