在原生生态系统中,测试有多种形式。

存在不同的测试库和框架,以及多种不同类型的测试。所有这些都需要成为构建的一部分,无论是频繁执行还是不频繁执行。本章专门解释了 Gradle 如何处理构建之间和构建内部的不同需求,并重点介绍了它如何与基于可执行文件的测试框架(例如 Google Test)集成。

在 Java 和 JVM 项目中进行测试相比,在 Gradle 中测试 C++ 项目的功能相对有限。在本章中,我们将解释如何控制测试运行的方式(测试执行)。

但首先,我们来看一下 Gradle 中原生测试的基础知识。

基础知识

所有 C++ 测试都围绕着一种 Task 类型:RunTestExecutable。它运行一个使用任何测试框架构建的单个测试可执行文件,并使用可执行文件的退出码来断言执行是否成功。测试用例的结果不会被收集,也不会生成报告。

为了运行,RunTestExecutable Task 类型只需要一条信息

当您使用C++ 单元测试插件时,您将自动获得以下内容

  • 一个专用的 unitTest 扩展,用于配置测试组件及其变体

  • 一个类型为 RunTestExecutablerun Task,用于运行测试可执行文件

测试插件会适当地配置所需的信息。此外,它们会将 run Task 附加到 check 生命周期 Task 上。它还会创建 testImplementation 依赖配置。仅在测试编译、链接和运行时需要的依赖项可以添加到此配置中。unitTest 脚本块的行为类似于 applicationlibrary 脚本块。

RunTestExecutable Task 有许多配置选项。我们将在本章的其余部分介绍其中的一部分。

测试执行

Gradle 在一个单独的(“派生”)进程中执行测试。

您可以通过 RunTestExecutable Task 上的几个属性来控制测试进程的启动方式,包括以下内容

ignoreFailures - 默认值: false

如果此属性为 true,即使某些测试失败,Gradle 也会在测试完成后继续进行项目构建。请注意,默认情况下,RunTestExecutable Task 类型总是会执行它检测到的每一个测试,而不管此设置如何。

有关所有可用配置选项的详细信息,请参阅 RunTestExecutable