C++ 单元测试插件与 配置缓存 不兼容。

C++ 单元测试插件提供了与基于 C++ 可执行文件的测试框架(例如 Google Test)集成的任务、配置和约定。

用法

build.gradle.kts
plugins {
    `cpp-unit-test`
}
build.gradle
plugins {
    id 'cpp-unit-test'
}

构建变体

C++ 单元测试插件理解以下维度。阅读 构建变体介绍 以了解更多信息。

目标机器 - 默认值为测试组件(如果存在)或构建主机(否则)

目标机器表示应用程序预期运行的机器。目标机器由其操作系统和体系结构标识。Gradle 使用目标机器来决定根据主机上的可用性选择哪个工具链。

目标机器可以按如下方式配置

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

任务

以下图表显示了此插件添加的任务之间的关系。

cpp unit test task graph
图 1. C++ 单元测试插件默认任务图

变体相关的任务

C++ 单元测试插件根据单元测试组件的变体创建任务。阅读 构建变体介绍 以了解更多信息。以下图表显示了变体相关任务之间的关系。

cpp unit test variant task graph
图 2. C++ 单元测试插件变体相关的任务图
compileTestVariantCpp(例如 compileTestCpp) - CppCompile

依赖于:所有为编译贡献源文件的任务 :: 使用选定的编译器编译 C++ 源文件。

linkTestVariant(例如 linkTest) - LinkExecutable

依赖于:所有为链接可执行文件贡献的任务,包括来自通过项目依赖项解析的项目和测试组件的 linkVariantcreateVariant 任务 :: 使用选定的链接器从编译后的目标文件链接可执行文件。

installTestVariant(例如 installTest) - InstallExecutable

依赖于:linkTestVariant 和所有为可执行文件的运行时贡献的任务,包括来自通过项目依赖项解析的项目的 linkVariant 任务 :: 安装可执行文件及其所有运行时依赖项,以便轻松执行。

runTestVariant(例如 runTest) - RunTestExecutable

依赖于:installTestVariant :: 运行已安装的可执行文件。

生命周期任务

C++ 单元测试插件将其某些任务附加到 基础插件章节 中记录的标准生命周期任务 - C++ 单元测试插件会自动应用这些任务。

assemble - 任务(生命周期)

聚合任务,用于为项目中的当前主机(如果存在)组装被测组件的调试变体。例如,C++ 应用程序插件C++ 库插件 将其链接和创建任务附加到此生命周期任务。此任务由 基础插件 添加。

test - 任务(生命周期)

依赖于:runTestVariant,它与构建主机最匹配 :: 用于测试组件的与构建主机最匹配的变体的聚合任务。

check - 任务(生命周期)

依赖于:test :: 执行验证任务的聚合任务,例如运行测试。一些插件会将自己的验证任务添加到 check 中。此任务由 基础插件 添加。

build - 任务(生命周期)

依赖于:checkassemble :: 执行项目完整构建的聚合任务。此任务由 基础插件 添加。

clean - 删除

删除构建目录及其中的所有内容,即 layout.buildDirectory 项目属性指定的路径。此任务由 基础插件 添加。

依赖管理

与 C++ 单元测试插件创建的任务一样,配置是根据应用程序组件的变体创建的。阅读 构建变体简介 以了解更多信息。以下图表描述了 C++ 单元测试插件添加的配置

cpp unit test configurations
图 3. C++ 单元测试插件配置
  • 白色配置是用户应用来声明依赖项的配置

  • 蓝色配置,也称为可解析配置,用 (R) 表示,是组件内部的,供其自身使用

以下配置用于声明依赖项

testImplementation

用于声明测试组件所有变体的实现依赖项。您应该在此处声明任何变体的依赖项。请注意,此配置继承了在被测试组件(库或应用程序)上声明的所有依赖项。

testVariantExecutableImplementation(例如 testExecutableImplementation)扩展了 testImplementation

用于声明测试组件特定变体的实现依赖项。您应该在此处声明特定变体的依赖项。

此插件没有消费者可用的配置。

以下配置由单元测试本身使用

cppCompileTestVariant(例如 cppCompileTest)扩展了 testVariantExecutableImplementation

用于编译单元测试。此配置包含单元测试的编译包含根目录,因此在调用 C++ 编译器进行编译时使用。

nativeLinkTestVariant(例如 nativeLinkTest)扩展了 testVariantExecutableImplementation

用于链接单元测试。此配置包含单元测试的库,因此在调用 C++ 链接器进行链接时使用。

nativeRuntimeTestVariant(例如 nativeRuntimeTest)扩展了 testVariantExecutableImplementation

用于执行单元测试。此配置包含单元测试的运行时库。

约定

C++ 单元测试插件为源代码和任务添加了约定,如下所示。

项目布局

C++ 单元测试插件假设项目布局如下所示。这些目录都不需要存在或包含任何内容。C++ 单元测试插件将编译它找到的任何内容,并处理任何缺失的内容。

src/test/cpp

C++ 源代码,扩展名为 .cpp.c++.cc

src/test/headers

头文件 - 编译单元测试所需的标题

您可以通过在 unitTest 脚本块上分别配置 sourceprivateHeaders配置项目布局

compileTestVariantCpp 任务

C++ 单元测试插件为要构建的测试组件的每个变体添加了一个 CppCompile 实例(例如 compileTestCpp)。阅读 构建变体简介 以了解更多信息。下面显示了一些最常见的配置选项。

compilerArgs

[]

debuggable

true

includes

configurations.cppCompileTestVariant + unitTest.privateHeaders

macros

[:]

objectFileDir

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

优化

false

位置无关代码

false

源代码

unitTest.cppSource

系统包含

从工具链派生

目标平台

从二进制文件的TargetMachine派生

工具链

根据目标机器自动选择

C++ 单元测试插件为测试组件的每个变体添加了一个 LinkExecutable 实例,例如 linkTest。有关更多信息,请阅读 构建变体介绍。下面显示了一些最常见的配置选项。

debuggable

true

configurations.nativeLinkTestVariant

链接文件

layout.buildDirectory.dir("exe/test/$variant/baseName") (*nix) 或 layout.buildDirectory.dir("exe\test\$variant\baseName.exe") (Windows)

链接器参数

[]

源代码

compileVariantCpp.objects(如果存在)+ compileTestVariantCpp.objects

目标平台

从二进制文件的TargetMachine派生

工具链

根据目标机器自动选择

installTestVariant 任务

C++ 单元测试插件为测试组件的每个变体添加了一个 InstallExecutable 实例,例如 installTest。有关更多信息,请阅读 构建变体介绍。无需在任务上配置任何属性。

runTestVariant 任务

C++ 单元测试插件为测试组件的每个变体添加了一个 RunTestExecutable 实例,例如 runTest。有关更多信息,请阅读 构建变体介绍。下面显示了一些最常见的配置选项。

参数

[]

忽略失败

false