C++ 單元測試外掛程式提供與基於 C++ 可執行檔的測試框架(例如 Google Test)整合的 task、配置和慣例。

用法

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

Task

下圖顯示此外掛程式新增的 task 之間的關係。

cpp unit test task graph
圖 1. C++ 單元測試外掛程式預設 task 圖

變體相依 Task

C++ 單元測試外掛程式根據單元測試元件的變體建立 task。請閱讀建置變體簡介以取得更多資訊。以下圖表顯示變體相依 task 之間的關係。

cpp unit test variant task graph
圖 2. C++ 單元測試外掛程式變體相依 task 圖
compileTestVariantCpp (例如 compileTestCpp) - CppCompile

相依於:所有為編譯貢獻原始檔的 task :: 使用選定的編譯器編譯 C++ 原始檔。

linkTestVariant (例如 linkTest) - LinkExecutable

相依於:所有為連結可執行檔貢獻的 task,包括來自透過專案相依性解析和受測元件的專案的 linkVariantcreateVariant task :: 使用選定的連結器從編譯後的物件檔連結可執行檔。

installTestVariant (例如 installTest) - InstallExecutable

相依於:linkTestVariant 和所有為可執行檔的運行時貢獻的 task,包括來自透過專案相依性解析的專案的 linkVariant task :: 安裝可執行檔及其所有運行時相依性,以便於執行。

runTestVariant (例如 runTest) - RunTestExecutable

相依於:installTestVariant :: 執行已安裝的可執行檔。

生命週期 Task

C++ 單元測試外掛程式將其某些 task 附加到 基礎外掛程式章節中記錄的標準生命週期 task — C++ 單元測試外掛程式會自動應用這些 task

assemble - Task (生命週期)

彙總 task,用於組合專案中目前主機(如果存在)的受測元件的 debug 變體。例如,C++ 應用程式外掛程式C++ 函式庫外掛程式將其連結和建立 task 附加到此生命週期 task。此 task 由 基礎外掛程式新增。

test - Task (生命週期)

相依於:最符合建置主機的 runTestVariant :: 最符合建置主機的變體的彙總 task,用於測試元件。

check - Task (生命週期)

相依於:test :: 執行驗證 task(例如執行測試)的彙總 task。某些外掛程式會將自己的驗證 task 新增至 check。此 task 由 基礎外掛程式新增。

build - Task (生命週期)

相依於:checkassemble :: 執行專案完整建置的彙總 task。此 task 由 基礎外掛程式新增。

clean - Delete

刪除建置目錄及其中的所有內容,即 layout.buildDirectory 專案屬性指定的路徑。此 task 由 基礎外掛程式新增。

相依性管理

就像 C++ 單元測試外掛程式建立的 task 一樣,配置是根據應用程式元件的變體建立的。請閱讀建置變體簡介以取得更多資訊。下圖描述 C++ 單元測試外掛程式新增的配置

cpp unit test configurations
圖 3. C++ 單元測試外掛程式配置
  • 白色配置是用戶應該用來宣告相依性的配置

  • 藍色配置(也稱為可解析配置,以 (R) 表示)是元件內部的,供其自身使用

以下配置用於宣告相依性

testImplementation

用於宣告測試元件所有變體的實作相依性。您應該在此處宣告任何變體的相依性。請注意,此配置繼承在受測元件(函式庫或應用程式)上宣告的所有相依性。

testVariantExecutableImplementation (例如 testExecutableImplementation) 延伸自 testImplementation

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

沒有消費者可以使用的此外掛程式的配置。

以下配置由單元測試本身使用

cppCompileTestVariant (例如 cppCompileTest) 延伸自 testVariantExecutableImplementation

用於編譯單元測試。此配置包含單元測試的編譯 include 根目錄,因此在調用 C++ 編譯器來編譯它時使用。

nativeLinkTestVariant (例如 nativeLinkTest) 延伸自 testVariantExecutableImplementation

用於連結單元測試。此配置包含單元測試的函式庫,因此在調用 C++ 連結器來連結它時使用。

nativeRuntimeTestVariant (例如 nativeRuntimeTest) 延伸自 testVariantExecutableImplementation

用於執行單元測試。此配置包含單元測試的運行時函式庫。

慣例

C++ 單元測試外掛程式新增了來源和 task 的慣例,如下所示。

專案佈局

C++ 單元測試外掛程式假設專案佈局如下所示。這些目錄都不需要存在或包含任何內容。C++ 單元測試外掛程式將編譯它找到的任何內容,並處理任何遺失的內容。

src/test/cpp

C++ 原始碼,副檔名為 .cpp.c++.cc

src/test/headers

標頭 - 編譯單元測試所需的標頭

您可以透過在 unitTest 腳本區塊上配置 sourceprivateHeaders 分別配置專案佈局

compileTestVariantCpp Task

C++ 單元測試外掛程式為測試元件的每個變體新增一個 CppCompile 實例來建置(例如 compileTestCpp)。請閱讀建置變體簡介以取得更多資訊。以下顯示一些最常見的配置選項。

compilerArgs

[]

debuggable

true

includes

configurations.cppCompileTestVariant + unitTest.privateHeaders

macros

[:]

objectFileDir

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

optimized

false

positionIndependentCode

false

source

unitTest.cppSource

systemIncludes

衍生自工具鏈

targetPlatform

衍生自二進制的 TargetMachine

toolChain

根據目標機器自動選擇

C++ 單元測試外掛程式為測試元件的每個變體新增一個 LinkExecutable 實例 - 例如 linkTest。請閱讀建置變體簡介以取得更多資訊。以下顯示一些最常見的配置選項。

debuggable

true

libs

configurations.nativeLinkTestVariant

linkedFile

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

linkerArgs

[]

source

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

targetPlatform

衍生自二進制的 TargetMachine

toolChain

根據目標機器自動選擇

installTestVariant Task

C++ 單元測試外掛程式為測試元件的每個變體新增一個 InstallExecutable 實例 - 例如 installTest。請閱讀建置變體簡介以取得更多資訊。無需在 task 上配置任何屬性。

runTestVariant Task

C++ 單元測試外掛程式為測試元件的每個變體新增一個 RunTestExecutable 實例 - 例如 runTest。請閱讀建置變體簡介以取得更多資訊。以下顯示一些最常見的配置選項。

args

[]

ignoreFailures

false