【C++】googletest_TEST/TEST_F

在 Google Test 框架中,TESTTEST_F 是定義測試用例的兩個核心宏,它們的區別主要體現在 測試上下文的管理方式 上。以下是二者的詳細對比:


1. TEST

定義方式
TEST(TestSuiteName, TestName) {// 測試邏輯
}
特點
  • 獨立上下文:每個測試用例獨立運行,不共享任何狀態。
  • 無初始化/清理:無法自動執行公共的設置(SetUp)和清理(TearDown)代碼。
  • 適用場景
    適用于不需要共享資源的簡單測試,或測試之間完全獨立的情況。
示例
TEST(CalculatorTest, AddTwoNumbers) {Calculator calc;EXPECT_EQ(calc.Add(2, 3), 5);
}TEST(CalculatorTest, SubtractTwoNumbers) {Calculator calc;  // 每個測試獨立創建對象EXPECT_EQ(calc.Subtract(5, 3), 2);
}

2. TEST_F

定義方式
TEST_F(TestFixtureClassName, TestName) {// 測試邏輯(可訪問夾具成員)
}
特點
  • 共享上下文:測試用例基于一個 測試夾具(Test Fixture),所有測試共享相同的初始化和清理邏輯。
  • 自動調用 SetUp/TearDown
    每個測試運行前自動調用 SetUp(),運行后自動調用 TearDown()
  • 適用場景
    需要共享配置或資源(如數據庫連接、文件句柄)的復雜測試。
示例
// 定義夾具類
class DatabaseTest : public testing::Test {
protected:void SetUp() override {db.Connect("test_db");  // 每個測試前連接數據庫}void TearDown() override {db.Disconnect();        // 每個測試后斷開連接}Database db;
};// 使用夾具
TEST_F(DatabaseTest, InsertRecord) {EXPECT_TRUE(db.Insert("data"));
}TEST_F(DatabaseTest, QueryRecord) {db.Insert("data");EXPECT_EQ(db.Query(), "data");
}

核心區別總結

特性TESTTEST_F
上下文管理獨立上下文,無共享基于夾具共享上下文
初始化和清理手動處理自動調用 SetUp()TearDown()
資源復用每個測試獨立創建資源所有測試共享夾具中的資源
代碼冗余高(重復初始化代碼)低(通過夾具復用代碼)
適用場景簡單、獨立的測試需要共享配置或資源的復雜測試

如何選擇?

  • 使用 TEST
    測試用例之間完全獨立,無需共享任何設置或資源。

  • 使用 TEST_F
    測試用例需要共享相同的初始化和清理邏輯(例如配置數據庫、創建臨時文件)。


關鍵注意事項

  • 夾具類的生命周期
    每個 TEST_F 測試運行時,Google Test 會創建一個新的夾具對象,確保測試隔離。

  • 避免狀態污染
    即使使用夾具,不同測試之間仍通過獨立的夾具對象隔離狀態。

  • 命名規范

    • TESTTestSuiteName 是自由命名的字符串。
    • TEST_FTestFixtureClassName 必須是已定義的夾具類名。

通過合理使用 TESTTEST_F,可以顯著提高測試代碼的可維護性和執行效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78302.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

14-DevOps-快速部署Kubernetes

在學習階段,為了能快速部署Kubernetes,這里用一個快速安裝工具:Kubeode,來完成Kubernetes的部署。 接下來部署一個單機,一主一從的Kubernetes。一主一從都部署在同一臺服務器上。 在虛擬機新開一個服務器&#xff0c…

Java 異常處理全解析:從基礎到自定義異常的實戰指南

Java 異常處理全解析:從基礎到自定義異常的實戰指南 一、Java 異常體系:Error 與 Exception 的本質區別 1. 異常體系核心架構 Java把異常當作對象來處理,并定義一個基類java.lang.Throwable作為所有異常的超類。 在Java API中已經定義了許…

redis 數據類型新手練習系列——string類型

redis 數據類型 Redis 主要支持以下幾種數據類型: (1)string(字符串): 基本的數據存儲單元,可以存儲字符串、整數或者浮點數。 (2)hash(哈希):一個鍵值對集…

Android12源碼編譯及刷機

由于google的AOSP源碼拉取經常失敗,編譯還經常出現各種問題。這里根據香橙派Orange Pi 5 Plus(Android12電視鏡像)源碼進行編譯演示。 RK芯片的開發板可玩性很高,這里以電視版本android系統為例子,學習的同時還可以當…

從零實現 registry.k8s.io/pause:3.8 鏡像的導出與導入

以下是為 registry.k8s.io/pause:3.8 鏡像的導出與導入操作定制的完整教程,適用于 Kubernetes 集群中使用 containerd 作為容器運行時的場景。本教程包含詳細步驟、常見問題解析及注意事項。 從零實現 registry.k8s.io/pause:3.8 鏡像的導出與導入 背景說明 Kuber…

Redis和MQ的區別

redis是一個高性能的key-value數據庫,支持消息推送功能,可以當做一個輕量級的隊列服務器使用。 redis只是提供一個高性能的、原子操作內存鍵值隊,具有高速訪問能力,雖然可以做消息隊列的存儲,但不具備消息隊列的任何功…

Centos7系統防火墻使用教程

CentOS 7是一種常見的Linux操作系統,防火墻作為網絡安全的第一道防線,對于服務器的安全至關重要。本文將介紹CentOS 7系統中防火墻的使用教程,包括如何開啟、關閉、配置以及防火墻規則的添加和刪除。 一、查看防火墻狀態 在開始操作之前&am…

Uniapp:navigator(頁面跳轉)

目錄 一、基本概述二、屬性說明三、具體使用一、基本概述 頁面跳轉。該組件類似HTML中的<a>組件,但只能跳轉本地頁面。目標頁面必須在pages.json中注冊。 二、屬性說明 屬性名類型默認值說明平臺差異說明urlString應用內的跳轉鏈接,值為相對路徑或絕對路徑,如:“……

大疆機場及無人機上云(航線規劃、指令飛行...)

系統操作預覽&#xff1a; 包含一鍵起飛、指令飛行、云臺控制、變焦、航線規劃、空域規劃、成果數據展示、實時飛行模擬、任務派發等 大疆無人機飛控平臺&#xff08;航線規劃、機場3、私有化部署&#xff09;_嗶哩嗶哩_bilibili 2025-04-02 更新 start、 已支持大疆機場3。…

【運維】云端掌控:用Python和Boto3實現AWS資源自動化管理

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 在云計算時代,AWS(Amazon Web Services)作為領先的云服務平臺,其資源管理的高效性對企業至關重要。本文深入探討如何利用Python的boto3…

Java ThreadLocal與內存泄漏

當我們利用 ThreadLocal 來管理數據時&#xff0c;我們不可避免地會面臨內存泄漏的風險。 原因在于 ThreadLocal 的工作方式。當我們在當前線程的 ThreadLocalMap 中存儲一個值時&#xff0c;一旦這個值不再需要&#xff0c;釋放它就變得至關重要。如果不這樣做&#xff0c;那么…

Linux之netlink(2)libnl使用介紹(1)

Linux之netlink(2)Libnl3使用介紹(1) Author&#xff1a;Onceday Date&#xff1a;2025年4月26日 漫漫長路&#xff0c;才剛剛開始… 全系列文章可查看專欄: Linux內核知識_Once-Day的博客-CSDN博客 本文翻譯自libnl3官方文檔&#xff1a;Netlink Library (libnl) 參考文檔…

深入理解TransmittableThreadLocal:原理、使用與避坑指南

一、ThreadLocal與InheritableThreadLocal回顧 在介紹TransmittableThreadLocal之前&#xff0c;我們先回顧一下Java中的ThreadLocal和InheritableThreadLocal。 1. ThreadLocal ThreadLocal提供了線程局部變量&#xff0c;每個線程都可以通過get/set訪問自己獨立的變量副本…

Linux下的I/O復用技術之epoll

I/O多路復用 指在單個線程或進程中&#xff0c;同時處理多個I/O操作的技術。 旨在提高程序處理多個并發I/O操作的能力&#xff0c;避免程序因等待某個I/O操作而被阻塞。在傳統的I/O模型中當程序進行I/O操作時(如讀取文件、接受網路數據等)&#xff0c;如果數據還未準備好&…

用 C 語言實現通用的冒泡排序算法

在日常編程中&#xff0c;排序算法是一個非常常見且重要的工具。雖然有許多排序算法可以選擇&#xff0c;但如果你需要一個能夠處理不同數據類型的排序算法&#xff0c;如何設計一個通用的排序算法呢&#xff1f;今天我們將實現一個通用的冒泡排序算法&#xff0c;支持不同數據…

C# 變量全解析:聲明、初始化與使用

在多用途的編程語言中&#xff0c;程序存取數據是一項基礎且關鍵的功能&#xff0c;而這一功能主要通過變量來實現。本文將全面深入地探討 C# 中的變量&#xff0c;包括變量的種類、聲明、初始化、自動初始化、多變量聲明以及如何使用變量的值。 變量概述 變量是一個名稱&…

Dify中的文本分詞處理技術詳解

Dify中的文本分詞處理技術詳解 引言核心架構概覽索引處理器工廠 文本分詞技術詳解基礎分詞器增強型遞歸字符分詞器固定分隔符文本分詞器遞歸分割算法 索引處理器中的分詞應用特殊索引處理器的分詞特點問答索引處理器父子索引處理器 分詞技術的應用場景技術亮點與優勢總結 引言 …

如何打包python程序為可執行文件

將 Python 程序打包為可執行文件是一個常見需求&#xff0c;尤其是在希望將應用程序分享給不具備 Python 環境的用戶時。以下是使用 PyInstaller 工具將 Python 程序打包為可執行文件的步驟。 步驟 1&#xff1a;安裝 PyInstaller 如果您還沒有安裝 PyInstaller&#xff0c;請…

美團Java后端二面面經!

場景題是面試的大頭&#xff0c;建議好好準備 Q. [美團]如何設計一個外賣訂單的并發扣減庫存系統&#xff1f; Q.[美團]為啥初始標記和重新標記需要STW&#xff1f; Q.[美團]騎手位置實時更新&#xff0c;如何保證高并發寫入&#xff1f; Q.[美團]訂單表數據量過大導致查詢…