在搜狗內部對於c++專案進行單元測試,基本都是使用gtest進行的。無論是單元測試,還是介面測試我們都做了大量工作。
具體來說,就是對函式進行單元測試或介面測試,對模組進行整合測試。但是,對於模板類並沒有進行測試,而是對其上層呼叫進行測試。
現在的問題是,對於模板類需不需要進行單元測試或介面測試?被寫成模板類,說明這個類是比較通用且很多地方都在使用它,所以我認為還是有必要進行測試的。
下面就直接進入主題:如何對單引數模板類進行測試?有如下模板類
//不用糾結於**細節,只為說明
template
class queue
void enqueue(const e& element) {}
e* dequeue() {}
size_t size() const
};
那麼使用gtest該如何對該類進行測試呢?code
//主模板類
template
queue* createqueue();
//全特化版本1
template <>
queue* createqueue()
//全特化版本2
溫馨提醒
如果使用--gtest_filter進行過濾,則不能寫為這樣的形式:
--gtest_filter=queuetest.defaultcons
--gtest_filter=queuetest.*
原因:因為後面帶了
/n,n表示數字,需寫為如下形式:
--gtest_filter=queuetest*
在前面的例子中,被測試模板類只有乙個型別引數,如果是多個型別引數呢,那該如何測試?兩個型別引數的模板類
//如果有兩個型別引數
template
class que
void enque(const e& el) {}
e* deque() {}
f size() const
};
大家可以靜靜的想幾分鐘,看能不能解決這個問題吧~~
下面就開始討論這個主題:如何對多引數模板類進行測試?不能照搬前面方案
當被測試模板類有兩個甚至多個型別引數時,再按前面例子的辦法來進行就行不通了,因為gtest模板類測試巨集僅接收乙個模板引數,那該如何處理這個問題呢?
我的解決方案
將多個引數放在乙個結構體裡,做成乙個模板類,將該模板類作為乙個型別。
將多個引數組合成結構體
template
struct params
測試框架隨之也要改變
template
class testx : public testing::test
virtual ~testx()
void setup() {}
void teardown() {}
// index為被測試模板類
index* const m_i;
};
改變需要測試的型別列表的寫法
typedef testing::types, params> impls;
測試用例書寫方式也需要更改
typed_test_case(testx, impls);
typed_test(testx, defaultcons)
就這麼多了,我想你應該已掌握了測試模板類的鑰匙了,有任何疑問和想法,請,我們一起溝通、學習、成長!
單元測試之Django單元測試
每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...
單元測試案例模板
專案組裡面突然說,開發人員要進行單元測試,並且要編寫單元測試報告,然後才能放到測試環境,讓測試去進行內部測試,否則連測試環境都不能上,作為一名開發,對自己開發的功能進行單元測試是十分有必要的。千萬不要以為測試就全是測試人員的工作,特別是自己開發的功能必須要自己測試過很多次之後,在讓測試人員來測試,不...
單元測試測試之unittest
首先我們先理解單元測試是誰做的 開發 然後我們測試會寫 之後,我們也可以自己做單元測試 那麼單元測試是做什麼?對某個功能去測試 單元測試測試什麼?類裡面的方法 單元測試怎麼測?建立物件 呼叫方法 傳參 通過傳遞多組資料來測試不同的情況 單元測試的框架有 unittest 和 pytest 學會了un...