test_f巨集作用參考
test_f巨集和test巨集的實現非常接近,只是test_f巨集的封裝更加開放一些,所以對test巨集的功能多了一些擴充套件。
詳細見gtest原始碼剖析——test巨集
#define
test_f(test_fixture, test_name)
gtest_test_(test_fixture, test_name, test_fixture,
::testing
::internal
::gettypeid
())
//step1
#if !gtest_dont_define_test
# define test(test_case_name, test_name) gtest_test(test_case_name, test_name)
#endif
//step2
#define gtest_test(test_case_name, test_name)
gtest_test_(test_case_name, test_name,::testing::test, ::testing::internal::gettesttypeid())
eg:
test(call,makecall);
test_f(call,makecall);
1.3.1 拼接類對比
區別在於:
test巨集中的拼接類call_makecall_test繼承於test類;
test_f巨集中的拼接類call_makecall_test繼承於call類;
即相對於test巨集,test_f可以覆蓋test類中的虛函式setup()和teardown()。
test巨集:
class call_makecall_test : public ::testing::test
;
test_f巨集:
class call_makecall_test : public ::testing::call
;
1.3.2 呼叫makeandregistertestinfo()傳參對比
區別在於:
test巨集: 傳入makeandregistertestinfo()的引數為::testing::test::setuptestcase和::testing::test::teardowntestcase。
test_f巨集: 傳入makeandregistertestinfo()的引數為call::setuptestcase和call::teardowntestcase。
即相對於test巨集,test_f可以定義自己的setuptestcase和teardowntestcase。
test巨集:
::testing
::testinfo
* const call_makecall_test::test_info_
=::testing
::internal
::makeandregistertestinfo(
"call",
"makecall",
null,
null,
::testing
::internal
::codelocation(__file__, __line__),
::testing
::internal
::gettesttypeid(),
::testing
::test
::setuptestcase,
::testing
::test
::teardowntestcase,
new::testing
::internal
::testfactoryimpl
);
test_f巨集:
::testing
::testinfo
* const call_makecall_test::test_info_
=::testing
::internal
::makeandregistertestinfo(
"call",
"makecall",
null,
null,
::testing
::internal
::codelocation(__file__, __line__),
::testing
::internal
::gettesttypeid(),
call::setuptestcase,
call::teardowntestcase,
new::testing
::internal
::testfactoryimpl
);
setuptestcase()方法在testcase的第乙個test之前執行.
teardowntestcase()方法在testcase的最後乙個test之後執行.
在testcase為call的測試用例中,可以共享_callserver,可以跨越多個test。
class call : public testing::test
static
void teardowntestcase()
static callserver* _callserver;
};
setup()方法在每個test之前執行
teardown()方法在每個test之後執行
在testcase為call的測試用例中,可以共享_callinfo,setup會在下乙個test重新呼叫,所以逐個對每乙個test生效。
class call : public testing::test
virtual
void teardown()
callinfo* _callinfo;
};
github: googletest
zhaipillar
2017-09-16
Azureus原始碼剖析(三)
接著第一篇 的工作,本篇繼續分析種子檔案監聽伺服器的實現細節。先簡單描述下其工作流程,首先伺服器在 6880 埠處開啟乙個套接字監聽,然後開啟乙個守護執行緒用於處理到來的 開啟種子檔案列表 請求,在這個服務執行緒中不斷迴圈讀取來自客戶的請求,對 torrent 檔案列表進行解析。如果此時 azure...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...
libevent原始碼深度剖析三
libevent基本使用場景和事件流程 張亮學習源 該從 入手?我覺得從程式的基本使用場景和 的整體處理流程入手是個不錯的方法,至少從個人的經驗上講,用此方法分析libevent是比較有效的。基本應用場景也是使用libevnet的基本流程,下面來考慮乙個最簡單的場景,使用livevent設定定時器,...