多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 單元測試之如何測試模板類

單元測試之如何測試模板類

來源:程序員人生   發布時間:2015-06-27 07:44:11 閱讀次數:4378次

1、背景


在搜狗內部對C++項目進行單元測試,基本都是使用gtest進行的。不管是單元測試,還是接口測試我們都做了大量工作。

具體來講,就是對函數進行單元測試或接口測試,對模塊進行集成測試。但是,對模板類并沒有進行測試,而是對其上層調用進行測試。

現在的問題是,對模板類需不需要進行單元測試或接口測試?被寫成模板類,說明這個類是比較通用且很多地方都在使用它,所以我認為還是有必要進行測試的。


2、如何測試單參數模板類

下面就直接進入主題:如何對單參數模板類進行測試?

有以下模板類

//不用糾結于代碼細節,只為說明

template <typename E>

class Queue

{

public:

Queue() {}

void Enqueue(const E& element) {}

E* Dequeue() {}

size_t size() const

{

return (size_t)123;

}

};

那末使用gtest該如何對該類進行測試呢?

1構建工廠類,用于創建被測試類

code

//主模板類

template <class T>

Queue<T>* CreateQueue();

//全特化版本1

template <>

Queue<int>* CreateQueue<int>()

{

return new Queue<int>;

}

//全特化版本2

template <>

Queue<char>* CreateQueue<char>()

{

return new Queue<char>;

}


2編寫測試類

code

template <class T>

class QueueTest : public testing::Test

{

protected:

QueueTest() : queue(CreateQueue<T>())

{}

virtual ~QueueTest()

{

delete queue;

}

Queue<T>* const queue;

};


3定義需要測試的類型

code typedef testing::Types<int, char> Impls;


4編寫測試用例

code

TYPED_TEST_CASE(QueueTest, Impls);

TYPED_TEST(QueueTest, DefaultCons)

{

EXPECT_EQ(123, this->queue->size());

}


5運行用例結果以下圖


溫馨提示

如果使用--gtest_filter進行過濾,則不能寫為這樣的情勢:

--gtest_filter=QueueTest.DefaultCons

--gtest_filter=QueueTest.*

緣由:由于后面帶了/n,n表示數字,需寫為以下情勢:

--gtest_filter=QueueTest*


在前面的例子中,被測試模板類只有1個類型參數,如果是多個類型參數呢,那該如何測試?


兩個類型參數的模板類

//如果有兩個類型參數

template <class E, class F>

class Que

{

public:

Que() {}

void Enque(const E& el) {}

E* Deque() {}

F size() const

{

return (F)123;

}

};


大家可以靜靜的想幾分鐘,看能不能解決這個問題吧~~


3、如何測試多參數模板類

下面就開始討論這個主題:如何對多參數模板類進行測試?

不能照搬前面方案當被測試模板類有兩個乃至多個類型參數時,再按前面例子的辦法來進行就行不通了,由于gtest模板類測試宏僅接收1個模板參數,那該如何處理這個問題呢?


我的解決方案

將多個參數放在1個結構體里,做成1個模板類,將該模板類作為1個類型。


將多個參數組合成結構體 template <class A, class B>

struct Params

{

typedef typename A TypeA;

typedef typename B TypeB;

}


測試框架隨之也要改變

template <class T>

class TestX : public testing::Test

{

protected:

TestX() : m_i(CreateIndex<typename T::TypeA, typename T::TypeB())

{}

virtual ~TestX()

{

delete m_i;

}

void Setup() {}

void TearDown() {}

// Index為被測試模板類

Index<typename T::TypeA, typename T::TypeB>* const m_i;

};


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
為碼而活
積分:4237
15粉絲
7關注
欄目熱點
關閉
程序員人生
主站蜘蛛池模板: 亚欧毛片基地国产毛片基地 | 欧美一区二区三区综合色视频 | 亚洲精品区一区二区三区四 | 亚洲日本在线观看视频 | 久久综合九色综合欧洲色 | 欧美日韩在线播放成人 | ffee性xxⅹ另类老妇hd | 波多野结衣国产一区二区三区 | 亚洲精品视频在线免费 | 边吃奶边操 | 亚洲欧洲高清 | 久久www成人看片 | 亚州一级毛片 | 欧美18-19sex性 | 中文乱码字字幕在线第5页 中文欧美日韩 | 亚洲一区二区精品视频 | 成人男女啪啪免费观看网站 | 中文字幕欧美日韩一 | 日韩一级欧美一级毛片在 | 国产一区二区三区在线 | 欧美成人黑人xx视频免费观看 | 国内自拍视频在线看免费观看 | 欧美一级日本一级韩国一级 | 成人免费久久精品国产片久久影院 | 日韩淫 | 国产精品视频一区二区三区w | 成人免费久久精品国产片久久影院 | 久久久久久久国产a∨ | 欧美午夜免费一级毛片 | 亚洲大成色www永久网址 | 18jlzz大全 | 在线精品小视频 | 免费在线看h | 羞羞色院91蜜桃在线观看 | 久久久久日韩精品免费观看网 | 欧美色阁 | 国产福利乳摇在线播放 | 亚洲综合欧美日韩 | 欧美一级毛片不卡免费观看 | 日韩大片免费在线观看 | 羞羞视频免费网站日本 |