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

副檔名為 .cpp.c++.cc 的 C++ 來源

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

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 任務

C++ 單元測試外掛會為測試元件的每個變異新增 InstallExecutable 執行個體,例如 installTest。請閱讀 建置變異簡介 以取得更多資訊。不需要在任務上設定任何屬性。

runTestVariant 任務

C++ 單元測試外掛會為測試元件的每個變異新增 RunTestExecutable 執行個體,例如 runTest。請閱讀 建置變異簡介 以取得更多資訊。以下是部分最常見的設定選項。

args

[]

ignoreFailures

false