gtest學習筆記 7 構造自己的單元測試框架

2021-10-23 15:28:59 字數 3199 閱讀 9945

本篇文章與之前的文章不屬於同乙個專案,另外新開的專案。

配置是w10、vs2015 release x64平台的 mt模式下。編碼為多位元組編碼。

先放結果圖吧。

參考的文件在test.cpp裡面的置頂。

;//執行測試案例

virtual

void

run()=

0;//測試案例的結果

int ntestresult;

//測試案列名稱

const

char

* testcase_name;

};unittest.h

#pragma once

#include

#include

#include

#include

"testcase.h"

/*設定顏色

*/void

setcolor

(unsigned

short forecolor =4,

unsigned

short backgroudcolor =0)

class

unittest

;unittest* unittest::

getinstance()

testcase* unittest::

registertestcase

(testcase* testcase)

int unittest::

run(

)else

ntestresult ++;}

setcolor

(foreground_green | foreground_green)

; std::cout <<

"***********************************==="

<< std::endl;

std::cout <<

"total testcase : "

<< npassed + nfailed << std::endl;

std::cout <<

"passed : "

<< npassed << std::endl;

//紅色

setcolor

(foreground_intensity|foreground_red)

; std::cout<<

"failed : "

<< nfailed << std::endl;

return ntestresult;

}

nancytest.h

#pragma once

#include

"testcase.h"

#include

"unittest.h"

#include

/*個人理解: 把每個巨集當做乙個函式比較好理解

//##的作用在於(token-pasting)符號連線操作符,即將巨集定義的多個形參成乙個實際引數名,在這裡testcase_name_test

*/#define testcase_name(testcase_name)\

testcase_name##_test

///nancy_test_

/// 以下這段巨集定義掩蓋了繁雜的測試用例封裝過程

///寫巨集定義的時候中間不要穿插,注釋,空行。

/*類靜態成員在類內宣告,類外定義,

型別名 + 限定字+類名+類作用域(::)+變數名

#號的作用是(stringizing)字串化操作符。其作用是:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。("testcase_name").

注意run()後邊沒有{},之所以這麼做是巨集定義將測試用例放入到run的方法主體裡。例如

ntest(footest_passdemo)

上述**中expect_eq(2, foo(1, 1));**放入到run的方法主體裡。

*/#define nancy_test_(testcase_name)\

class testcase_name(testcase_name):public testcase\

;\ virtual void run();\

private:\

static testcase* const testcase_;\

};\testcase* const testcase_name(testcase_name)\

::testcase_=unittest::getinstance()->registertestcase(\

new testcase_name(testcase_name)(#testcase_name));\

void testcase_name(testcase_name)::run()

///ntest巨集

#define ntest(testcase_name)\

nancy_test_(testcase_name)

///run_all_test巨集

#define run_all_tests()\

unittest::getinstance()->run();

///斷言的巨集expect_eq

#define expect_eq(m,n)\

if(m!=n)\

test.cpp

#include

"nancytest.h"

/*在window平台下,去除了列印的字型顏色

參考*/int

foo(

int a,

int b)

ntest

(footest_passdemo)

ntest

(footest_faildemo)

intmain

(int argc,

char

* ar**)

gtest學習筆記

test巨集的作用是建立乙個簡單測試,他定義了乙個測試函式,在該函式中可以使用任何c 並使用提供的斷言來進行檢查。a test test case name,test name b test f test fixture,test name 需要寫乙個類,繼承testing test。然後實現兩個靜...

Mini 容器學習筆記7 建構函式注入

元件工廠在建立元件時將通過一定的策略選定特定的建構函式,然後進行構造。建構函式的選擇策略是 1.如果遍歷的建構函式如果含有引數,那麼容器先檢查建立上下文中是否含有指定的引數陣列或命名引數字典,如果有則選擇該建構函式,反之則遍歷建構函式的引數,判斷每乙個引數是否可以進行注入,如果都可以進行注入則選擇該...

gtest學習 最簡單的test

gtest使用的是1.6版本 在msvc資料夾下,執行gtest.sln,生成對應的lib庫,這裡生成的lib會存在gtest 1.6.0 msvc gtest debug目錄下,叫gtestd.lib 注意 如果測試程式使用的是vs2008,那麼這個lib庫也必須使用vs2008編譯 然後再依賴下...