CPPTest設計分析

目錄

  • 1 概述
  • 2 設計
  • 3 擴展Output
  • 3.1 擴展實例

1 概述

??CppTest是一個可移植、功能強大但簡單的單元測試框架,用于處理C++中的自動化測試。重點在于可用性和可擴展性。支持多種輸出格式,并且可以輕松添加新的輸出格式。

CppTest下載地址Sourceforge Github地址
下面對其設計進行分析,以更好對其使用。

2 設計

其類圖如下:
類圖
說明:

  • 從類圖看其類型主要是Suite類型和Output類型
  • Suite其析構函數純虛函數,明顯是用來派生使用的。
    • 保護類型虛函數setup和tear_down是在運行Suite中每個測試函數之前和之后調用的接口,可以重載這兩個接口,做測試之前的準備和收尾工作,這兩個函數默認什么都不做。
  • Output類型是過程中所有輸出類型的基類,其構造函數是保護類型的,不能直接使用,需要派生使用。需要實現接口如下:
    • initialize 初始化接口
    • finished 完成接口
    • suite_start suite開始接口
    • suite_end suite結束接口
    • test_start 測試開接口
    • test_end 測試結束接口
    • assertment 斷言接口
  • 從Output派生的類型:
    • CompilerOutput 類似編譯器輸出類型,支持格式如下:
      • Generic - file:line: text
      • BCC - Error cpptest file line: text
      • GCC - file:line: text
      • MSVC - file(line) : text
    • TextOutput 文本個數輸出,支持格數如下:
      • Terse 其僅顯示正確測試的數量。
        RingQueueSuite: 2/2, 50% correct in 0.002901 seconds
        Total: 2 tests, 50% correct in 0.002901 seconds
        
      • Verbose 顯示正確測試的數量基礎上,其還示出了針對每個失敗的測試的擴展斷言信息。
        RingQueueSuite: 2/2, 50% correct in 0.002377 seconds
        Test:    one_to_multi
        Suite:   RingQueueSuite
        File:    cpp/test/concurrent/concurrent/ring_queue_test.cpp
        Line:    90
        Message: Got 5, expected 6Total: 2 tests, 50% correct in 0.002377 seconds
        
    • CollectorOutput 收集型輸出類型,不同于上面實時輸出類型,收集輸出類型先收集信息,在整個測試完畢后統一輸出。
      • HtmlOutput Html格式輸出屬于收集型輸出

3 擴展Output

如果是實時輸出直接從Output派生,如果是收集型輸出,需要從CollectorOutput派生。

3.1 擴展實例

cpptest默認輸出都是英文信息,假如我們想輸出中文信息及報告。我們需要:

  • 派生我們自己Output,在我們自己的Output實現中需要輸出時按中文輸出即可。
  • 不使用TEST_ASSERT_EQUALS/TEST_ASSERT_EQUALS_OBJ/TEST_ASSERT_EQUALS_MSG/TEST_ASSERT_DELTA,這4個宏中會有英文錯誤信息。
    #define TEST_ASSERT_EQUALS_MSG(expected, got, msg)						\{																	\if (!((got) == (expected)))										\{																\std::stringstream tmpstream;								\tmpstream << (msg) << ": ";									\tmpstream << "Got " << (got) << ", expected " << (expected);\assertment(::Test::Source(__FILE__, __LINE__,				\tmpstream.str().c_str()));						\if (!continue_after_failure()) return;						\}																\}
    
  • 上面4個宏如果需要,可以重新定義,將其中英文信息修改為中文信息。
    #define TEST_ASSERT_EQUALS_MSG(expected, got, msg)						\{																	\if (!((got) == (expected)))										\{																\std::stringstream tmpstream;								\tmpstream << (msg) << ": ";									\tmpstream << "期望 " << (expected) << ", 實際是 " << (got); \assertment(::Test::Source(__FILE__, __LINE__,				\tmpstream.str().c_str()));						\if (!continue_after_failure()) return;						\}																\}
    

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

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

相關文章

Java StringBuffer類和StringBuilder類

在使用 StringBuffer 類時&#xff0c;每次都會對 StringBuffer 對象本身進行操作&#xff0c;而不是生成新的對象&#xff0c;所以如果需要對字符串進行修改推薦使用 StringBuffer。 StringBuilder 類在 Java 5 中被提出&#xff0c;它和 StringBuffer 之間的最大不同在于 St…

IO優化 C++ IO使用優化技巧

在編程中&#xff0c;輸入/輸出&#xff08;I/O&#xff09;操作通常是影響程序性能的主要瓶頸之一。 優化 I/O 操作可以顯著提高程序的效率&#xff0c; 特別是在處理大量數據或需要頻繁進行 I/O 操作的應用中。 以下是一些常見的 I/O 優化技巧&#xff1a; 1. 緩沖 I/O …

DataWhale-吃瓜教程學習筆記 (六)

學習視頻**&#xff1a;第4章-決策樹_嗶哩嗶哩_bilibili 西瓜書對應章節&#xff1a; 第五章 5.1&#xff1b;5.2&#xff1b;5.3 文章目錄 MP 神經元- 感知機模型 &#xff08;分類模型&#xff09;-- 損失函數定義--- 感知機學習算法 - 隨機梯度下降法 - 神經網絡需要解決的問…

WPF引入控件模板

控件模板基礎 需求 需求&#xff1a;客戶對目前的控件樣式不滿意&#xff0c;需要修改樣式。 每一個控件都有Template屬性&#xff0c;可以定制樣式。 我下面以Button為例子&#xff1a; <Button Content"Button" Height"30" Width"100"…

docker mysql cpu100% cpu打滿排查 mysql cpu爆了 mysql cpu 100%問題排查

1. docker 啟動了一個mysql 實例&#xff0c;近期忽然發現cpu100% 如下圖所示 命令&#xff1a; top 2.進入容器內排查&#xff1a; docker exec mysql&#xff08;此處可以是docker ps -a 查找出來的image_id&#xff09; -it /bin/bash cd /var/log cat mysqld.log 容器內m…

2024年Stable Diffusion下載+安裝+使用教程(超詳細版本)收藏這一篇就夠了!

本篇咱們要聊的是如何用“整合包”來搞定StabIe Diffusion WebUI的本地安裝和使用&#xff0c;別擔心&#xff0c;你不需要成為計算機大神&#xff0c;新手也能輕松上手。不過得提醒一下&#xff0c;你的硬盤得留出100G~200G的空間來&#xff0c;才能玩得轉。 整合包放這里&am…

網站被瀏覽器提示“不安全”的解決辦法

在互聯網時代&#xff0c;網站的安全性直接關系到用戶體驗和品牌形象。當用戶訪問網站時&#xff0c;如果瀏覽器出現“您與此網站之間建立的連接不安全”的警告&#xff0c;這不僅會嚇跑潛在客戶&#xff0c;還可能對網站的SEO排名造成等負面影響。 瀏覽器發出的“不安全”警告…

MetaGPT-DataInterpreter源碼解讀

MetaGPT-DataInterpreter源碼解讀 MetaGPT 是一種多智能體框架&#xff0c;其利用SOP&#xff08;Standard Operating Procedures&#xff09;來協調多智能體系統。即&#xff1a;多智能體智能體環境標準流程&#xff08;SOP&#xff09;通信經濟 DataInterpreter &#xff1a;…

無人機基礎知識(模式篇)

姿態模式&#xff1a;姿態模式通常是在GPS模式無法使用的情況下進行操作的模式。通過操作桿對無人機進行操控&#xff0c;姿態模式下無人機只能提供自穩&#xff0c;不提供定點懸停&#xff0c;受外界影響很大&#xff1b; GPS模式&#xff1a;GPS模式通俗一點就是依靠GPS將無…

22、PHP 實現連續子數組的最大和、整數中1出現的次數

題目&#xff1a; PHP 實現連續子數組的最大和 描述&#xff1a; HZ偶爾會拿些專業問題來忽悠那些非計算機專業的同學。 今天測試組開完會后,他又發話了:在古老的一維模式識別中, 常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。 但是,如果向量中包含負數…

【原創教程】一次搞定伺服原點問題(進階篇)

我們在進行伺服控制時,經常會遇到伺服原點問題,有時被其復雜的原點回歸方式弄的不知所措,本篇文章我們將伺服原點遇到的問題進行了總結,便于大家將此徹底搞明白。 1 伺服原點 1.1 原點的概念 伺服原點是指在伺服系統中的初始位置,用來標記機構的起點。其他后面的一切運…

分頁導航DOM更新實踐:JavaScript與jQuery的結合使用

分頁導航DOM更新實踐&#xff1a;JavaScript與jQuery的結合使用 在Web開發中&#xff0c;分頁導航是展示大量數據時不可或缺的UI組件。合理的分頁不僅可以提高應用性能&#xff0c;還能優化用戶體驗。本博客將通過一個實際的DOM結構和模擬數據&#xff0c;講解如何使用JavaScr…

C++ (第二天上午---函數重載和缺省參數和占位參數)

一、函數重載 1、問題的引入 在實際開發中&#xff0c;有時候我們需要實現幾個功能類似的函數&#xff0c;只是有些細節不同。例如希望交換兩個變量的值&#xff0c;這兩個變量有多種類型&#xff0c;可以是 int、float、char、bool 等&#xff0c;我們需要通過參數把變量的地…

Executors 提供了哪些創建線程池的方法?

java.util.concurrent.Executors 是一個工廠類&#xff0c;提供了一些靜態方法來創建各種類型的線程池。這些方法簡單易用&#xff0c;可以快速創建常見的線程池類型。以下是 Executors 提供的主要創建線程池的方法及其特性&#xff1a; 1. newFixedThreadPool(int nThreads) …

計算機系統基礎(二)

1.數值數據的表示 為什么采用二進制&#xff1f; 二進制只有兩種基本狀態&#xff0c;兩個物理器件就可以表示0和1二進制的編碼、技術、運算規則都很簡單0和1與邏輯命題的真假對應&#xff0c;方便通過邏輯門電路實現算術運算 數值數據表示的三要素 進位記數制&#xff08;十…

以太網常用協議——ARP協議

文章目錄 一、 ARP協議與MAC層1.TCP/IP協議2. MAC地址3. ARP映射4. ARP請求和ARP應答 二、以太網幀格式三、ARP協議1. 以太網ARP通信測試&#xff1a; 以太網使用的協議很多&#xff0c;常用的有ARP、UDP等。 再介紹具體協議之前需要先知道一些基本的概念&#xff1a; 一、 AR…

COB顯示屏與GOB顯示屏封裝方式有哪些不同?

很多用戶因為使用場景的特殊性&#xff0c;所以會選擇防護能力更強的COB顯示屏或者是GOB顯示屏&#xff0c;兩種產品從名稱上看只是有一個字母的懸殊&#xff0c;其實使用的工藝截然不同&#xff0c;GOB顯示屏通常是在SMD顯示屏的基礎上進行升級&#xff0c;而COB顯示屏則是完全…

獨立開發者系列(15)——git的使用

上一篇14文章觸發了敏感話題&#xff0c;直接未過審核&#xff0c;看來技術博客也有敏感點。 大部分情況下&#xff0c;獨立項目是你一個人開發&#xff0c;但是當你接的項目比較大的時候&#xff0c;你需要其他人的幫忙&#xff0c;這個時候你要把代碼分享給別人。因為如果你…

【分布式數據倉庫Hive】Hive的安裝配置及測試

目錄 一、數據庫MySQL安裝 1. 檢查操作系統是否有MySQL安裝殘留 2. 刪除殘留的MySQL安裝&#xff08;使用yum&#xff09; 3. 安裝MySQL依賴包、客戶端和服務器 4. MySQL登錄賬戶root設置密碼&#xff0c;密碼值自定義&#xff0c;這里是‘abc1234’ 5. 啟動MySQL服務 6…

maven設置阿里云鏡像源(加速)

一、settings.xml介紹 settings.xml是maven的全局配置文件&#xff0c;maven的配置文件存在三個地方 項目中的pom.xml&#xff0c;這個是pom.xml所在項目的局部配置文件用戶配置&#xff1a;${user.home}/.m2/settings.xml全局配置&#xff1a;${M2_HOME}/conf/settings.xml 優…