C++ 单元测试插件提供了用于集成基于 C++ 可执行文件的测试框架(例如 Google Test)的任务、配置和约定。
使用方法
plugins {
`cpp-unit-test`
}
plugins {
id 'cpp-unit-test'
}
构建 Variant
C++ 单元测试插件支持以下维度。阅读构建 Variant 简介了解更多信息。
- 目标机器 - 默认为被测试组件(如果存在)或构建主机(否则)
-
目标机器指定了应用程序期望运行的机器。目标机器通过其操作系统和架构来标识。Gradle 根据主机上 Tool chain 的可用性来决定选择哪个 Tool chain。
目标机器可以按如下方式配置
unitTest {
targetMachines = listOf(machines.linux.x86_64,
machines.windows.x86, machines.windows.x86_64,
machines.macOS.x86_64)
}
unitTest {
targetMachines = [
machines.linux.x86_64,
machines.windows.x86, machines.windows.x86_64,
machines.macOS.x86_64
]
}
任务
下图显示了此插件添加的任务之间的关系。

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

compileTestVariantCpp
(例如compileTestCpp
)- CppCompile-
依赖项:所有为编译贡献源文件的任务 :: 使用选定的编译器编译 C++ 源文件。
linkTestVariant
(例如linkTest
)- LinkExecutable-
依赖项:所有为链接可执行文件贡献的任务,包括通过项目依赖项和被测试组件解析的项目中的
linkVariant
和createVariant
任务 :: 使用选定的链接器从编译后的目标文件链接可执行文件。 installTestVariant
(例如installTest
)- InstallExecutable-
依赖项:
linkTestVariant
以及所有为可执行文件运行时贡献的任务,包括通过项目依赖项解析的项目中的linkVariant
任务 :: 安装可执行文件及其所有运行时依赖项,以便轻松执行。 runTestVariant
(例如runTest
)- RunTestExecutable-
依赖项:
installTestVariant
:: 运行已安装的可执行文件。
生命周期任务
C++ 单元测试插件将其一些任务附加到 Base Plugin 章中记录的标准生命周期任务(C++ 单元测试插件会自动应用该插件)。
assemble
- 任务(生命周期)-
聚合任务,用于为项目中的当前主机(如果存在)组装被测试组件的 debug variant。例如,C++ 应用程序插件和 C++ 库插件将其链接和创建任务附加到此生命周期任务。此任务由 Base Plugin 添加。
test
- 任务(生命周期)-
依赖项:与构建主机最匹配的
runTestVariant
:: 与构建主机最匹配的 Variant 的聚合任务,用于测试组件。 check
- 任务(生命周期)-
依赖项:
test
:: 执行验证任务(例如运行测试)的聚合任务。一些插件将其自己的验证任务添加到check
中。此任务由 Base Plugin 添加。 build
- 任务(生命周期)-
依赖项:
check
,assemble
:: 执行项目完整构建的聚合任务。此任务由 Base Plugin 添加。 clean
- 删除-
删除构建目录及其中的所有内容,即由
layout.buildDirectory
项目属性指定的路径。此任务由 Base Plugin 添加。
依赖管理
与 C++ 单元测试插件创建的任务一样,配置也是基于应用程序组件的 Variant 创建的。阅读构建 Variant 简介了解更多信息。下图描述了 C++ 单元测试插件添加的配置

-
白色框中的配置是用户应该用于声明依赖项的
-
蓝色框中的配置,也称为可解析配置(标记为 (R)),是组件内部使用的
以下配置用于声明依赖项
testImplementation
-
用于声明测试组件所有 Variant 的实现依赖项。您应该在此处声明任何 Variant 的依赖项。请注意,此配置会继承在被测试组件(库或应用程序)上声明的所有依赖项。
testVariantExecutableImplementation
(例如testExecutableImplementation
)扩展testImplementation
-
用于声明测试组件特定 Variant 的实现依赖项。您应该在此处声明特定 Variant 的依赖项。
此插件没有可供消费者使用的配置。
以下配置由单元测试本身使用
cppCompileTestVariant
(例如cppCompileTest
)扩展testVariantExecutableImplementation
-
用于编译单元测试。此配置包含单元测试的编译 include 根目录,因此在调用 C++ 编译器进行编译时使用。
nativeLinkTestVariant
(例如nativeLinkTest
)扩展testVariantExecutableImplementation
-
用于链接单元测试。此配置包含单元测试的库,因此在调用 C++ 链接器进行链接时使用。
nativeRuntimeTestVariant
(例如nativeRuntimeTest
)扩展testVariantExecutableImplementation
-
用于执行单元测试。此配置包含单元测试的运行时库。
约定
C++ 单元测试插件为源文件和任务添加了约定,如下所示。
项目布局
C++ 单元测试插件假定项目布局如下所示。这些目录都不需要存在或包含任何内容。C++ 单元测试插件将编译它找到的任何内容,并处理任何缺失的部分。
src/test/cpp
-
扩展名为
.cpp
、.c++
或.cc
的 C++ 源文件 src/test/headers
-
头文件 - 编译单元测试所需的头文件
您可以通过在 unitTest
脚本块上分别配置 source
和 privateHeaders
来配置项目布局。
compileTestVariantCpp
任务
C++ 单元测试插件为要构建的测试组件的每个 Variant 添加一个 CppCompile 实例(例如 compileTestCpp
)。阅读构建 Variant 简介了解更多信息。下面显示了一些最常见的配置选项。
compilerArgs |
[] |
debuggable |
|
includes |
|
macros |
[:] |
objectFileDir |
|
optimized |
|
positionIndependentCode |
|
source |
|
systemIncludes |
派生自 Tool chain |
targetPlatform |
派生自二进制文件的 |
toolChain |
linkTestVariant
任务
C++ 单元测试插件为测试组件的每个 Variant 添加一个 LinkExecutable 实例(例如 linkTest
)。阅读构建 Variant 简介了解更多信息。下面显示了一些最常见的配置选项。
debuggable |
|
libs |
|
linkedFile |
|
linkerArgs |
[] |
source |
|
targetPlatform |
派生自二进制文件的 |
toolChain |
installTestVariant
任务
C++ 单元测试插件为测试组件的每个 Variant 添加一个 InstallExecutable 实例(例如 installTest
)。阅读构建 Variant 简介了解更多信息。无需配置任务的任何属性。
runTestVariant
任务
C++ 单元测试插件为测试组件的每个 Variant 添加一个 RunTestExecutable 实例(例如 runTest
)。阅读构建 Variant 简介了解更多信息。下面显示了一些最常见的配置选项。
args |
|
ignoreFailures |
|